如何为特定字符串编写正则表达式?

2024-04-27 08:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序来定位这个基因。1..789是基因5'-3'的起始和终止位置。补体(45678..98765)是基因3'-5'。所以这个基因的开始是98765,结束于45678。你知道吗

我想提取数据并分别以["None",1,789]["complement',98765,45678]的格式存储在python列表中。你知道吗

  1. 1..789=>;["None",1,789]
  2. complement(45678..98765)=>;["complement',98765,45678]

我要用正则表达式吗?怎么写?你知道吗

除了正则表达式,还有其他方法吗?你知道吗


Tags: 数据方法定位gt程序none列表格式
2条回答
import re
st = "complement(45678..98765)"
pat = re.compile(r'\w+')
result = pat.findall(st)
for element in result:
    if type(element) is int:
        a = result.pop()
        result.remove(element)
        result.append(str(a))
print(result)

结果:

['complement', '45678', '98765']

这里\w表示匹配字母数字字符,而在\w+中,“+”表示匹配模式的一个或多个出现,更确切地说。。。这些话。你知道吗

所以\w+将匹配一组您想要的字符,比如'45678'

import re
st = "1..789"
pat = re.compile(r'\w+')
result = pat.findall(st)
for element in result:
    if type(element) is int:
        a = result.pop()
        result.remove(element)
        result.append(str(a))
print(result)

结果:

['1', '789']

字母数字的意思是:从A到Z的所有字母和从0到9的所有数字

如果您是regex新手,请考虑阅读sams teach yourself regular experssions Book 这是一个非常棒的regex介绍,它会给你一个鹰眼般的角度来看待这个问题。 在那之后,你脑子里所有的问题都会得到回答。你知道吗

this website is also a good resource

import re

arr = [
    '1..789',
    'complement(45678..98765)',
]

for s in arr:
    print(list(re.search(r'^(.*?)\(?(\d+)\.\.(\d+)', s).groups()))

输出:

['', '1', '789']
['complement', '45678', '98765']

说明:

^               # beginning of line
    (.*?)       # group 1, 0 or more any character, not greedy
    \(?         # optional opening parenthesis
    (\d+)       # group 2, 1 or more digits
    \.\.        # 2 dots
    (\d+)       # group 3, 1 or more digits

相关问题 更多 >