如何在正则表达式模式中与findall+Python一起使用{}
我正在创建一个正则表达式,如下所示:如何在正则表达式模式中与findall+Python一起使用{},python,regex,findall,Python,Regex,Findall,我正在创建一个正则表达式,如下所示: 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) 这将返回输出 布拉布拉赫 findall输出:['
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)
这将返回输出
布拉布拉赫
findall输出:['blah','blah','blah']
-为什么findall输出匹配'blah'三次,而它只在模式中指定了{2}次
如果我更改为{4},则findall匹配:
asd = re.compile(r"(blah){4}")
findall output: ['blah']
-{m}如何用re.search和re.findall处理
非常感谢。如果你想抓住那些废话,你应该把它们包起来:
asd = re.compile(r"((?:blah){2})")
请注意,我确保不会使用?:
你的{4}也一样。正则表达式会找到它,但不会捕获它。如果你想抓住它,你应该把它包装起来。blah{2}捕获并耗尽字符串blahblah,但只返回blahblah中的最后一个blah。由于字符串中有三个blahblah,它将输出['blah','blah','blah']
blah{4}只能匹配一次,因此它会为您提供['blah']blahblah、blahblah和blahblah。三场比赛。每一个都是废话。我想你也想告诉正则表达式引擎也只返回两个值,对吗?然后,您不需要限制量词:使用re.findall获得结果,并使用其索引获得必要的项。
>>>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']