在查询之前和之后查找正则表达式搜索

时间:2013-06-20 19:26:41

标签: python regex search regex-group

所以我有这个序列,我正在尝试使用正则表达式的搜索功能在查询出现之前和之后的区域找到区域。

这就是我所拥有的

sequence = 'abcdefghijklmnopqrstuvwxyz'
query = 'jklmnop'

这就是我想要的结果

before = 'abcdefghi'
after = 'qrstuvwxyz'

我尝试过前一个,它不起作用。我认为这会将它分成3组

sequence = 'abcdefghijklmnopqrstuvwxyz'
query = 'jklmnop'
print re.search('\w+(query)\w+',sequence).group(0)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'group'

1 个答案:

答案 0 :(得分:1)

在字符串中写query不会在该字符串中存储query的值,它只是创建一个字符串'query'的新字符串。

>>> print '\w+(query)\w+'
\w+(query)\w+

您应该使用字符串格式:

>>> sequence = 'abcdefghijklmnopqrstuvwxyz'
>>> query = 'jklmnop'
>>> '(\w+)({})(\w+)'.format(query)
'(\\w+)(jklmnop)(\\w+)'

>>> re.search('(\w+)({})(\w+)'.format(query),sequence).group(1)
'abcdefghi'
>>> re.search('(\w+)({})(\w+)'.format(query),sequence).group(3)
'qrstuvwxyz'

最好将re.split用于此目的:

>>> strs = 'abcdefghijklmnopqrstuvwxyz'
>>> import re
>>> before, after = re.split('jklmnop',strs)
>>> before
'abcdefghi'
>>> after
'qrstuvwxyz'