正则表达式使用零宽断言截取字符串

在使用正则表达式的过程中,有时候需要提取aaa开头bbb结尾的字符串,这个时候正则表达式的零宽断言就显的非常有用了,例如下面的例子:

str = 
'''
start
import re
aaa
bbb
ccc
ddd
end
xxxx
end
'''
我们需要截取上述字符串start和第一个end中间的内容,并且不包含start和end,此时的正则表达式可以这么写:
#r"(?<=start)[\s\S]*(?=end)"
str2 = re.search(r"(?<=start)[\s\S]*?(?=end)", str).group()
print(str2) #输出 '''import re
aaa
bbb
ccc
dd'''

正则规则中, (?<=start)表示的是匹配start开始的位置并且不包含start,(?=end)表示的是end结尾的位置并且不包含end,[\s\S]?表示多行匹配所有字符(包括换行符)并且寻找最短的字符,[\s\S]?中的?正则的贪婪与懒惰规则。

猜你喜欢

转载自blog.csdn.net/qq_41841073/article/details/131106615