如何使用Python查找文本中指定语句的段落编号?
解决方法
核心思路
先提取所有被<p>标签包裹的段落内容,再逐个检查目标句子是否存在于段落中,最终返回对应的段落编号(从1开始计数)。
正确实现代码(以Python为例)
import re # 示例输入文本 input_text = """<p>第一段内容示例...</p> <p>The lady of the house must prepare sandwiches on the occasion of her daughter’s engagement.</p> <p>第三段内容示例...</p>""" # 要查找的目标句子 target_sentence = "The lady of the house must prepare sandwiches on the occasion of her daughter’s engagement." # 提取所有<p>标签内的段落 paragraphs = re.findall(r'<p>(.*?)</p>', input_text, re.DOTALL) # 遍历段落定位目标句子 for idx, para in enumerate(paragraphs, start=1): if target_sentence in para.strip(): print(f"目标句子在第{idx}段") break else: print("未找到目标句子")
正则规则说明
r'<p>(.*?)</p>':使用非贪婪匹配.*?,确保只捕获单个<p>标签内的内容,避免误匹配跨段落的文本。re.DOTALL:让正则中的.匹配包括换行符在内的所有字符,兼容段落内有换行的情况。
常见失效原因排查
如果之前的正则没生效,大概率是这几个问题:
- 用了贪婪匹配
.*而非.*?,导致匹配范围覆盖了多个段落。 - 未添加
re.DOTALL参数,段落内有换行时匹配中断。 - 试图直接用正则定位句子位置,而非先提取段落再检查,逻辑复杂易出错。
内容的提问来源于stack exchange,提问作者Roshni Hirani
相关产品推荐
相关产品推荐

