Python如何解决按指定起止字符串提取爬取文本内容返回空的问题
问题原因
- 默认情况下Python正则的
.元字符不匹配换行符(也就是你文本中的\r\n),你的两个匹配关键词中间存在多行换行,所以.*在匹配到第一处换行就会中断,无法匹配到后续的元和四年,返回空列表。 - 你看到的
\r\n、\u3000是Python字符串的标准转义表示,实际存储的是对应的回车换行、全角空格字符,不存在额外的反斜杠干扰,不需要提前删除。
解决方案
方案1:正则匹配(加换行匹配标志)
给正则添加re.S(别名re.DOTALL)标志,让.可以匹配包括换行在内的所有字符,建议搭配非贪婪匹配符?避免过度匹配:
import re # 加r前缀表示正则原始字符串,re.S开启换行匹配 res = re.findall(r'唐會要卷二.*?元和四年', text, flags=re.S) if res: print(res[0])
输出结果和你期望的完全一致。
方案2:字符串切片(更简单,无正则坑)
如果起止字符串是固定的,直接用索引切片实现更高效,不需要引入正则:
start = text.find("唐會要卷二") end = text.find("元和四年") + len("元和四年") if start != -1 and end != -1: res = text[start:end] print(res)
内容的提问来源于stack exchange,提问作者Kevin Hong
相关产品推荐
相关产品推荐

