使用Python的正则表达式捕获字符串的子集

时间:2014-06-18 08:26:44

标签: python regex

我有一个看起来像这样的字符串:

>Bounded_RNA_of:1DDL:Elength : 1

正则表达式可以这样形成:

>Bounded_RNA_of:(\w+):(\w)length : 1

在一天结束时,我想要提取的只是1DDLE

但为什么这个正则表达式失败了?

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

这样做的方法是什么?

5 个答案:

答案 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组。