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
相关产品推荐
相关产品推荐

