非贪婪正则表达式匹配结果异常问题排查
问题原因
你的正则表达式re.findall(r"\.\s(.*?):\s?[A-Z]", text)存在核心缺陷:
.*?作为惰性匹配,允许匹配包括句号在内的所有字符,导致正则会从文本中第一个出现的.(句号+空格)位置开始匹配,一直延伸到第一个符合: \s?[A-Z]的位置,把中间整段无关内容都囊括进去。- 未限制匹配范围,无法精准定位到目标标题(如
Objectives)前的那个句号。
修正方案
将正则中的.*?替换为[^.]*?,用否定字符集限定匹配范围:
re.findall(r"\.\s([^.]*?):\s?[A-Z]", text)
原理说明
[^.]表示匹配除句号外的任意字符,这样正则会自动停在上一个句号的位置,只会捕获最后一个. 之后、冒号之前的内容,精准提取到你需要的Objectives。
内容的提问来源于stack exchange,提问作者mlee_jordan
相关产品推荐
相关产品推荐

