我试图在给定字符串中的正则表达式匹配之前和之后立即找到字符。这是代码。
>>>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']
。我错过了什么?
答案 0 :(得分:2)
这是因为捕获组。只需移动括号:
re.findall('(.{0,5}abb.{0,5})',s)
findall
仅匹配群组,因此您要匹配的所有内容都必须位于括号中。
答案 1 :(得分:2)
返回字符串中所有非重叠的模式匹配,作为列表 字符串。从左到右扫描字符串,并返回匹配项 按顺序找到。 如果模式中存在一个或多个组, 返回群组列表;如果模式,这将是一个元组列表 有不止一个小组。
因此,将整个模式作为一个组或删除组包围将为您提供所需的内容。
>>> 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']