python技巧

正则表达式的捕获组和非捕获组

2018-06-20  本文已影响0人  陆_志东

如果使用正则表达式的findall操作,在正则匹配规则中如果使用了捕获组,则并不会返回全组结果,
而只是返回捕获组的结果
比如一下例子想要获取两个连续重复的词

str = 'abb db abc abc cc def def'
res = re.findall(r"(\w+)\s\1",str,flags=re.IGNORECASE)
print(res)
>> ['abc', 'def']
res = re.findall(r"((?P<p1>\w+)\s(?P=p1))",str,flags=re.IGNORECASE)
print(res)
>>[('abc abc', 'abc'), ('def def', 'def')]
res_list = []
for i in res:
    res_list.append(i[0])
print(res_list)
>>['abc abc', 'def def']

(patten) 匹配pattern并捕获结果,自动设置组号。
(?P<name>pattern) 匹配pattern并捕获结果,设置name为组名。
(\num) 对捕获组的反向引用。其中 num 是一个正整数
(?P=name) 对 命名的捕获组反向引用
(?:patten) 匹配结果但不捕获结果

上一篇 下一篇

猜你喜欢

热点阅读