正则关于search的group的巨坑

本文分享了作者在使用Python正则表达式时遇到的问题及解决方案,包括避免使用过多的命名组、推荐双端匹配而非单端匹配以及建议使用finditer而非search。

昨天写了一点正则,发现一个史前巨坑,就是re.search不能超过三个(?P<>.*?)的,具体的很可能还有其他限制,但从我调试的结果来看就是这样的——以下面这个代码段为例:

AsdfAefwAfwefAqewq

当正则下面这般时候,group不出type4

base_obj = re.compile(r'A(?P<type1>.*?)A(?P<type2>.*?)A(?P<type3>.*?)A(?P<type4>.*?)',re.S)

出来的group(type1到type4的结果):
在这里插入图片描述
搞不出“qewq”
就这样,至少我目前的感觉是不能超三个。
另外,最好不要用“开”的手段去正则(也就是只匹配字符串左端的方法),最好是双端匹配,也就是最好不要出现像这种(单端):

re.compile(r'A(?P<type>.*?)')

最好像下面这样:

re.compile(r'A(?P<type>.*?)B')

不容易出bug。
另外多用finditer,少用search
总结:
1.search一句正则中不超3group
2.最好用双端而不是单端;你要是用单端还很容易出现长时间给不出结果的情况,至于为什么懒得去追究了
3.多用finditer,少用search

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值