如何通过python删除大括号括起来的块

时间:2009-12-24 06:10:45

标签: python regex api wikipedia

示例文字:String - > rev标签内的内容(通过lxml)。

我正在尝试删除文本中的{{BLOCKS}}。

我使用以下正则表达式删除简单的一行块:

p = re.compile('\{\{*.*\}\}')
nonBracketedString = p.sub('', bracketedString)

但是,这并没有删除内容开头的第一个多行括号部分。如何删除多行,卷曲的括号内的块?


编辑:

答案解答:

p = re.compile('\{\{*?.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)

3 个答案:

答案 0 :(得分:2)

设置dotall标志。

p = re.compile('\{\{*.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)

在默认模式下,.匹配除换行符之外的任何字符。如果指定了DOTALL标志,则匹配包括换行符在内的任何字符。

http://docs.python.org/library/re.html

此外,您需要在括号之间进行非贪婪的匹配:.*?

答案 1 :(得分:1)

设置dotall标志 - 这允许。匹配换行符。

p = re.compile('\{\{*.*\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)

答案 2 :(得分:1)

>>> import urllib2
>>> import re
>>> s = "".join(urllib2.urlopen('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Italian%20War%20of%201542-1546&redirects&rvprop=content&format=xml').readlines())
>>> p = re.compile('\{\{.*?\}\}', re.DOTALL)
>>> re.sub(p, '', s)
'<?xml version="1.0"?><api><query><redirects><r from="Italian War of 1542-1546" to="Italian War of 1542\xe2\x80\x931546" /></redirects><pages><page pageid="3719774" ns="0" title="Italian War of 1542\xe2\x80\x931546"><revisions><rev xml:space="preserve">\n\n\n\nThe \'\'\'Italian War of 1542\xe2\x80\x9346\'\'\' was a conflict late in the [[Italian Wars]], ...

我在这里截断了输出,但是足以看到它正在工作。