Python正则表达式multiple repeat报错及Bat(wo)+man疑问求解
正则问题解答
1. Bat(wo)+man的问题
这个正则语法本身是合法的,但它的匹配逻辑是:必须以Bat开头,后面跟至少1次wo,最后以man结尾。如果你的需求里需要匹配不含wo的Batman,这个正则就做不到;但针对你给出的目标字符串Batwowowowowowomanman,它确实能匹配出Batwowowowowowoman——因为(wo)+会匹配所有连续的wo段,刚好衔接后面的第一个man。
2. Bat(wo)*+man的报错原因
报错re.error: multiple repeat at position 8是因为Python的re模块不允许重复限定符叠加使用:
*代表匹配前面的子表达式0次或多次;+代表匹配前面的子表达式1次或多次;
把这两个限定符连写*+,属于在同一位置重复使用重复规则,直接违反正则语法,所以报错。
正确写法
如果你想匹配Bat后接**任意次数(0次及以上)**的wo再加man,用:
batRegex = re.compile(r'Bat(wo)*man')
如果你需要匹配至少1次wo(和原需求一致),用最初的Bat(wo)+man即可。
如果担心正则过度匹配(比如把后面的man也包含进去),可以用非贪婪模式确保匹配到第一个man:
batRegex = re.compile(r'Bat(wo)+?man')
执行你的搜索代码后,就能得到期望的'Batwowowowowowoman'。
内容的提问来源于stack exchange,提问作者littlebeauty
相关产品推荐
相关产品推荐

