Skip to main content
 首页 » 编程设计

python之使用正则表达式解析类似 xml 的文档

2025年05月04日32webabcd

我有一个包含许多类似 xml 的元素的文件,例如这个:

<document docid=1> 
Preliminary Report-International Algebraic Language 
Perlis, A. J. & Samelson,K. 
CACM December, 1958 
</document> 

我需要解析 docid 和文本。什么是合适的正则表达式?

我已经试过了,但它不起作用:

collectionText = open('documents.txt').read() 
docsPattern = r'<document docid=(\d+)>(.)*</document>' 
docTuples = re.findall(docsPattern, collectionText) 

编辑:我修改了这样的模式:

<document docid=(\d+)>(.*)</document> 

不幸的是,这匹配整个文档而不是单个文档元素。

EDIT2:Ahmad 和 Acorn 的正确实现是:

collectionText = open('documents.txt').read() 
docsPattern = r'<document docid=(\d+)>(.*?)</document>' 
docTuples = re.findall(docsPattern, collectionText, re.DOTALL) 

请您参考如下方法:

你的模式是贪心的,所以如果你有多个 <document>它最终会匹配所有元素。

您可以使用 .*? 使其成为非贪婪的,意思是“匹配零个或多个字符,尽可能少。”更新后的模式是:

<document docid=(\d+)>(.*?)</document>