Python正则匹配问题:为何re.search()执行后返回None?
问题原因分析
你的正则表达式匹配失败的核心原因是正则里多写了一个多余的右括号匹配规则:
你定义的正则是 r"(?==>(.*?)\)",其中末尾的 \) 要求匹配一个实际的右括号,但你的目标字符串(不管是读取后的还是原文本里的)都没有右括号,自然匹配不到任何内容,所以 search() 返回 None。
你提到在regex101测试有效,大概率是测试时使用的字符串包含右括号,或者不小心漏掉了正则里的 \),才导致测试结果和实际代码不一致。
修正后的正则
如果你的需求是捕获 => 后面的英文序数词,只需要去掉多余的 \) 即可:
import re # 保留正向预查的写法 substitution_regex = re.compile(r"(?==>(.*?))") # 更简洁的直接捕获写法 substitution_regex = re.compile(r"=>\s*(.*)")
用修正后的正则测试你的字符串,就能正常捕获到 fifth、sixth 等内容。
内容的提问来源于stack exchange,提问作者An old man in the sea.
相关产品推荐
相关产品推荐

