比如: st = “平安夜吃苹果呀小菇凉” , pattern = '((平|苹).*?果)‘
我希望匹配的字符串是 "平安夜吃苹果" 以及 “苹果” 很显然后面那个是包含在前面一个字符串中的。
解决方式有两种:
1. ?= 原理暂时我没有弄清楚,请路过的大佬指点
在这个pattern的周围加上一个?=,然后套一个分组括号。详见代码:
st = "平安夜吃苹果呀小菇凉"
pattern = '(?=((平|苹).*?果))'
finditer = re.finditer(pattern,st)
for f in finditer:
print(f.group(1))
2. 把python的re模块升级为regex模块,这个regex里面有个overlapped的选项,将这个选项置为True就行。
import regex
st = "平安夜吃苹果呀小菇凉"
pattern = '((平|苹).*?果)'
finditer = regex.finditer(pattern,st,overlapped=True)
for f in finditer:
print(f.group(1))
以上