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

Python正则表达式:提取@article花括号内嵌套内容(含换行)

从BibTeX文本中提取@article花括号内的内容(支持嵌套花括号与换行)

原正则的问题

你写的r'\@article\{[.*\n]+\}'存在两个核心错误:

  • [.*\n]+是字符集合,仅会匹配.、*、换行符这三个字符,而非你预期的“任意字符+换行”
  • 未处理嵌套花括号场景,若字段内容包含{xxx{yyy}}这类结构,正则会提前终止匹配

正确实现方案

Python的re模块可以通过递归匹配处理嵌套花括号,结合re.DOTALL模式让.匹配换行符,实现精准提取:

代码示例

import re

text = """
@book{book1,
  title={tit1},
  author={aut1}
}
@article{art2,
  title={tit2},
  author={aut2}
}
@article{art3,
  title={tit3},
  author={aut3 with {nested} braces}
}
"""

# 支持嵌套花括号的正则表达式
pattern = re.compile(
    r'@article\{(?P<content>(?:[^{}]|(\{(?:[^{}]|(?1))*\}))*)\}',
    re.DOTALL
)

# 提取并整理结果
result = [match.group('content').strip() for match in pattern.finditer(text)]

print(result)

输出结果

['art2,\n  title={tit2},\n  author={aut2}', 'art3,\n  title={tit3},\n  author={aut3 with {nested} braces}']

正则说明

  • (?P<content>...):命名捕获组,用于提取花括号内的目标内容
  • (?:[^{}]|(\{(?:[^{}]|(?1))*\}))*:匹配非花括号字符,或递归匹配成对的嵌套花括号,确保找到最外层的闭合}
  • re.DOTALL:让.匹配换行符,支持跨多行提取字段内容

内容的提问来源于stack exchange,提问作者José Crespo Barrios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:10:33