Python使用re.search提取文本指定章节内容返回None的问题排查
你的正则写法存在以下几处错误,叠加后导致search返回None:
- 未转义特殊元字符:
(和)在正则中是分组标记,属于特殊元字符,你要匹配字面量的(1),需要写成\(1\),否则正则无法识别你要的章节头。 - 没有开启跨行匹配模式:默认情况下正则中的
.不会匹配换行符,你的目标内容跨了多行,不加匹配模式的话.*只会匹配到第一行末尾就停止,无法匹配到后面的列表内容。 - 分组逻辑错误:你现在的正则分组只有
(1)里的1,就算匹配成功,调用group(1)也只会拿到数字1,完全拿不到整个章节内容,需要把你要捕获的整个章节范围放进分组里。 - 多余的无效匹配字符:你在
(.*)后面多写了一个无意义的.,会额外要求匹配一个任意字符,反而容易导致匹配失败。
正确的写法示例:
import re s = """ ... (1) Literature 1. a. 2. b. 3. c. ... """ # 加re.S(等价于re.DOTALL)让.匹配换行符,非贪婪匹配确保只抓当前章节 res = re.search(r"(\(1\) Literature\n\n.*?)\n\n", s, flags=re.S).group(1) print(res)
内容的提问来源于stack exchange,提问作者NineWasps
相关产品推荐
相关产品推荐

