昨天写了一点正则,发现一个史前巨坑,就是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
本文分享了作者在使用Python正则表达式时遇到的问题及解决方案,包括避免使用过多的命名组、推荐双端匹配而非单端匹配以及建议使用finditer而非search。

1138

被折叠的 条评论
为什么被折叠?



