示例文字:String - > rev标签内的内容(通过lxml)。
我正在尝试删除文本中的{{BLOCKS}}。
我使用以下正则表达式删除简单的一行块:
p = re.compile('\{\{*.*\}\}')
nonBracketedString = p.sub('', bracketedString)
但是,这并没有删除内容开头的第一个多行括号部分。如何删除多行,卷曲的括号内的块?
编辑:
答案解答:
p = re.compile('\{\{*?.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
答案 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]], ...
我在这里截断了输出,但是足以看到它正在工作。