python正则表达式的⾮贪婪模式
我想说的是下⾯这个?的使⽤!!就是这个⾮贪婪模式
python正则表达式不包含当该字符紧跟在任何⼀个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后⾯时,匹配模式是⾮贪婪的。⾮贪婪模式尽可能少的匹配所搜索的字符串,⽽默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",⽽ 'o+' 将匹配所有
'o'。
这个很重要啊!!我本来要做的是在⼀个句⼦中提取出所有⼈⼤代表以及其地址的,下⾯那个pattern4的“.*”后⾯没有加?号,
于是结果就是从湖南省到最后⼀个⼈⼤代表都给提进去了,这可不是我想要的结果啊 !!,然后翻阅资料发现了上⾯这个贪婪模式,
他会尽可能匹配少的字符串,也就是说他碰到第⼀个⼈⼤代表就返回了。这样才是我要的效果,并且如果要实现句⼦中不包含某些东西,则
要添加  (?![。,,])实现 ,也就是说这个要⼀整句话
import re
pattern4 = repile(r'.{0,2}[省市区镇县乡](?![。,、]).*⼈⼤代表')
pattern2=repile(r'[共青团员|民⾰党员|民盟盟员|民建会员|民进会员|农⼯党党员|致公党党员|九三学社社员|台盟盟员|⽆党派⼈⼠|中共党员|中共预备党员|预备党员text1=' 湖南省长沙市⾬花区⾮诚县⼈⼤代表湖南省长沙市苏因镇第九届⼈⼤代表长沙市⾬花区⼈⼤代表乡⼈⼤代表马镇⼈⼤代表'
a=re.findall(pattern4,text1)
a
>>>
>>>['湖南省长沙市⾬花区⾮诚县⼈⼤代表湖南省长沙市苏因镇第九届⼈⼤代表长沙市⾬花区⼈⼤代表乡⼈⼤代表马镇⼈⼤代表']
下⾯在“.*”的后⾯加了“?”也就是使⽤⾮贪婪模式,这样就可以了ok!
import re
pattern4 = repile(r'.{0,2}[省市区镇县乡].*?⼈⼤代表')
text1=' 湖南省长沙市⾬花区⾮诚县⼈⼤代表,湖南省长沙市苏因镇第九届⼈⼤代表,长沙市⾬花区⼈⼤代表乡⼈⼤代表马镇⼈⼤代表'
a=re.findall(pattern4,text1)
a
>>>
>>>
>>>
['湖南省长沙市⾬花区⾮诚县⼈⼤代表', '湖南省长沙市苏因镇第九届⼈⼤代表', '长沙市⾬花区⼈⼤代表', '乡⼈⼤代表', '马镇⼈⼤代表']