搜索re的前后字符

时间:2014-03-02 09:37:48

标签: python regex

我试图在给定字符串中的正则表达式匹配之前和之后立即找到字符。这是代码。

>>>import re
>>>s='dafddadffdbdasbffsbbfdbabbfsdfadsfdfddf' #completely garbage test string
>>>re.findall('.{0,5}(abb).{0,5}',s)
['abb']

测试字符串在此处出现'abb'...fdbabbfsd...我认为特殊字符.\n以外的任何字符相匹配以及{m,n} Causes the resulting RE to match from m to n repetitions of the preceding RE, attempting to match as many repetitions as possible所述here

所以我希望我的回复['bbfdbabbfsdfa']而不只是['abb']。我错过了什么?

2 个答案:

答案 0 :(得分:2)

这是因为捕获组。只需移动括号:

re.findall('(.{0,5}abb.{0,5})',s)

findall仅匹配群组,因此您要匹配的所有内容都必须位于括号中。

答案 1 :(得分:2)

根据re.findall documentation

  

返回字符串中所有非重叠的模式匹配,作为列表   字符串。从左到右扫描字符串,并返回匹配项   按顺序找到。 如果模式中存在一个或多个组,   返回群组列表;如果模式,这将是一个元组列表   有不止一个小组。

因此,将整个模式作为一个组或删除组包围将为您提供所需的内容。

>>> re.findall('(.{0,5}abb.{0,5})',s)  # Entire pattern as a group
['bbfdbabbfsdfa']
>>> re.findall('.{0,5}abb.{0,5}',s)    # No capturing group
['bbfdbabbfsdfa']