我有一个看起来像这样的字符串:
>Bounded_RNA_of:1DDL:Elength : 1
正则表达式可以这样形成:
>Bounded_RNA_of:(\w+):(\w)length : 1
在一天结束时,我想要提取的只是1DDL
和E
。
但为什么这个正则表达式失败了?
import re
seq=">Bounded_RNA_of:1DDL:Elength : 1"
match = re.search(r'(>Bounded_RNA_of:(\w+):(\w)length : 1)',seq)
print match.group()
# prints this:
# >Bounded_RNA_of:1DDL:Elength : 1
这样做的方法是什么?
答案 0 :(得分:3)
这是由于全局捕获括号,您应该只捕获两个必需元素。
import re
seq=">Bounded_RNA_of:1DDL:Elength : 1"
match = re.search(r'>Bounded_RNA_of:(\w+):(\w)length : 1',seq)
print match.group(1), match.group(2)
答案 1 :(得分:1)
只需打印:
print match.group(2)
print match.group(3)
<强>输出强>
1DDL
E
答案 2 :(得分:1)
>>> match = re.search(r'>Bounded_RNA_of:(\w+):(\w)length : 1',seq)
>>> print match.group(1,2)
('1DDL', 'E')
答案 3 :(得分:0)
不要在:
中使用括号match = re.search(r'(>Bounded_RNA_of:(\w+):(\w)length : 1)',seq)
应该是:
match = re.search(r'>Bounded_RNA_of:(\w+):(\w)length : 1',seq)
然后你可以用:
提取1DDL和E.print match.group(1)
print match.group(2)
编辑: 如果您想保留此括号,可以使用以下内容提取信息:
print match.group(2)
print match.group(3)
答案 4 :(得分:0)
其他人已经回答了,但我想建议一个更精确的正则表达式来完成这项任务:
import re
subject = ">Bounded_RNA_of:1DDL:Elength : 1"
match = re.search(r">\w+:([^:]+):(\w)", subject)
if match:
print match.group(1)
print match.group(2)
正则表达式解释
>
充当锚点,帮助引擎知道我们正在寻找合适的位置。它有助于防止以后的回溯。\w+:
与第一个冒号:
([^:]+)
会捕获任何非:
的字符集到第1组。:
(\w)
将剩余的字符捕获到第2组。