我正在创建一个正则表达式,如下所示:
import re
asd = re.compile(r"(blah){2}")
mo = asd.search("blahblahblahblahblahblah ll2l 21HeHeHeHeHeHe lllo")
mo1 = asd.findall("blahblahblahblahblahblah")
print(mo.group())
print("findall output: ", mo1)
这会返回输出 blahblah findall输出:[' blah',' blah',' blah']
- 为什么所有输出都匹配' blah'三次,只在模式中指定{2}次?
如果我更改为{4},则查找匹配:
asd = re.compile(r"(blah){4}")
findall output: ['blah']
- 如何使用re.search和re.findall处理{m}?
非常感谢。
答案 0 :(得分:1)
如果你想捕捉 (blah){2}
(你有2 blah
),你应该把它包起来:
asd = re.compile(r"((?:blah){2})")
请注意,我确保不要抓住内部
blah
(使用?:
)
>>>asd = re.compile(r"((?:blah){2})")
>>>mo = asd.search("blahblahblahblahblahblah ll2l 21HeHeHeHeHeHe lllo")
>>>mo1 = asd.findall("blahblahblahblahblahblah")
>>>print(mo.group())
blahblah
>>>print("findall output: ", mo1)
findall output: ['blahblah', 'blahblah', 'blahblah']
你所拥有的{4}
完全相同。 regex
会找到它,但不会发现它。如果你想抓住它,你应该把它包起来。
答案 1 :(得分:1)
(blah){2}
会捕获并耗尽字符串blahblah
但仅返回blah
中的 last blahblah
。由于您的字符串中有三个blahblah
,因此会输出['blah', 'blah', 'blah']
(blah){4}
只能匹配一次,因此它会为您提供['blah']