python正则表达式的非贪婪模式

!!!我想说的是下面这个?的使用!!就是这个非贪婪模式!!!

?

当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

 这个很重要啊!!我本来要做的是在一个句子中提取出所有人大代表以及其地址的,下面那个pattern4的“.*”后面没有加?号,

于是结果就是从湖南省到最后一个人大代表都给提进去了我擦,这可不是我想要的结果啊 !!,然后翻阅资料发现了上面这个贪婪模式,他会尽可能匹配少的字符串,也就是说他碰到第一个人大代表就返回了。这样才是我要的效果,并且如果要实现句子中不包含某些东西,则要添加   (?![。,,])实现 ,也就是说这个要一整句话

 

import re

pattern4 = re.compile(r'.{0,2}[省市区镇县乡](?![。,、]).*人大代表')

pattern2=re.compile(r'[共青团员|民革党员|民盟盟员|民建会员|民进会员|农工党党员|致公党党员|九三学社社员|台盟盟员|无党派人士|中共党员|中共预备党员|预备党员|党员|中国共产党党员|民主人士|民盟党员|]')
text1=' 湖南省长沙市雨花区非诚县人大代表湖南省长沙市苏因镇第九届人大代表长沙市雨花区人大代表乡人大代表马镇人大代表'
a=re.findall(pattern4,text1)
a

>>>

>>>['湖南省长沙市雨花区非诚县人大代表湖南省长沙市苏因镇第九届人大代表长沙市雨花区人大代表乡人大代表马镇人大代表']

 下面在“.*”的后面加了“?”也就是使用非贪婪模式,这样就可以了ok!

import re

pattern4 = re.compile(r'.{0,2}[省市区镇县乡].*?人大代表')


text1=' 湖南省长沙市雨花区非诚县人大代表,湖南省长沙市苏因镇第九届人大代表,长沙市雨花区人大代表乡人大代表马镇人大代表'
a=re.findall(pattern4,text1)
a
>>>
>>>
>>>
['湖南省长沙市雨花区非诚县人大代表', '湖南省长沙市苏因镇第九届人大代表', '长沙市雨花区人大代表', '乡人大代表', '马镇人大代表']
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值