如何在findall + Python中使用正则表达式模式中的{}

时间:2016-12-18 02:12:36

标签: 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)

这会返回输出     blahblah     findall输出:[' blah',' blah',' blah']

- 为什么所有输出都匹配' blah'三次,只在模式中指定{2}次?

如果我更改为{4},则查找匹配:

asd = re.compile(r"(blah){4}")
findall output:  ['blah']

- 如何使用re.search和re.findall处理{m}?

非常感谢。

2 个答案:

答案 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']