最简单的方式描述贪婪和非贪婪

继续上次的有一个忘了说了

split 根据匹配进行切割字符串,并返回一个列表

import re
citing=re.split(r":| ","info:zhangsa 33 zhejiang")
print(citing)
输出:['gerenjianli', 'zhangsa', '33', 'zhejiang']

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配.

而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。
在”*”,”?”,”+”,”{m,n}”后面加上?,使贪婪变成非贪婪。

import re
s="my telephone 1230-83356881"
r=re.match(".+?(\d+-\d+)",s).group(1)
print(r)
    1230-83356881
import re
s="my telephone 1230-83356881"
r=re.match(".+(\d+-\d+)",s).group(1)
print(r)
0-83356881

正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“\d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。

解决方式:非贪婪操作符“?”,这个操作符可以用在”*”,”+”的后面,要求正则匹配的越少越好。

import re
a=re.match(r’aa(\d+?)’,’aa123456bb’).group(1)
print(a)
输出:1

import re
a=re.match(r’aa(\d+)’,’aa123456bb’).group(1)
print(a)
输出:123456

import re

a=re.match(r’aa(\d+)bb’,’aa123456bb’).group(1)
print(a) #如果前后均有限定条件,则非匹配模式失效

import re
a=re.match(r’aa(\d+?)bb’,’aa123456bb’).group(1)
print(a) #如果前后均有限定条件,则非匹配模式失效

猜你喜欢

转载自blog.csdn.net/qq_42982789/article/details/82153463
今日推荐