You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python re模块提取学术论文结果与结论间的文本?

解决正则提取论文结果与结论间斜体段落的问题

你的代码返回None主要有几个原因:

  • re.match仅从字符串开头匹配,目标内容不在起始位置,自然匹配失败;
  • 正则里的Result少了s,和目标章节标题6. Results不匹配;
  • 默认模式下.不匹配换行符,.*?无法跨多行捕获章节间内容;
  • 未开启多行模式时,^仅匹配整个字符串的开头,无法定位章节行。

下面给出两种可行的实现方法:

方法1:正则匹配+提取斜体内容

使用re.search扫描整个文本,结合re.DOTALL实现跨多行匹配,再提取所有斜体段落:

import re

# 模拟论文文本
text = """
1. Introduction
背景介绍...
6. Results
*实验结果显示,A组有效率达85%,显著高于B组的60%。*
*进一步分析发现,变量X与Y呈显著正相关(p<0.05)。*
7. Conclusion
研究结论总结...
"""

# 匹配Results和Conclusion之间的所有内容
content_match = re.search(r'6\. Results(.*?)7\. Conclusion', text, re.DOTALL)
if content_match:
    # 提取所有被*包裹的斜体段落
    italic_paras = re.findall(r'\*(.*?)\*', content_match.group(1), re.DOTALL)
    # 输出处理后的斜体内容
    for para in italic_paras:
        print(para.strip())

如果你的斜体是LaTeX格式的\textit{...},只需把提取斜体的正则改成r'\\textit{(.*?)}'即可。

方法2:逐行遍历(更稳定)

针对章节结构清晰的论文文本,逐行判断是否进入目标区间,再收集斜体内容:

text_lines = text.splitlines()
in_target_section = False
italic_paragraphs = []

for line in text_lines:
    stripped_line = line.strip()
    if stripped_line == '6. Results':
        in_target_section = True
        continue
    if stripped_line == '7. Conclusion':
        in_target_section = False
        break
    # 收集斜体行(假设斜体以*首尾包裹)
    if in_target_section and stripped_line.startswith('*') and stripped_line.endswith('*'):
        italic_paragraphs.append(stripped_line.strip('*').strip())

print(italic_paragraphs)

内容的提问来源于stack exchange,提问作者everythingispeachy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:50:28