如何通过python删除被花括号包围的块

如何通过python删除被花括号包围的块,python,regex,api,wikipedia,Python,Regex,Api,Wikipedia,示例文本:->rev标签内的内容(通过lxml) 我试图删除文本中的{{BLOCKS}} 我使用以下正则表达式删除了简单的单行块: p = re.compile('\{\{*.*\}\}') nonBracketedString = p.sub('', bracketedString) 但是,这不会删除内容开头的第一个多行括号部分。如何移除多行卷曲的括号块 编辑: 答案中的解决方案: p = re.compile('\{\{*?.*?\}\}', re.DOTALL) nonBrackete

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

我试图删除文本中的{{BLOCKS}}

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

p = re.compile('\{\{*.*\}\}')
nonBracketedString = p.sub('', bracketedString)
但是,这不会删除内容开头的第一个多行括号部分。如何移除多行卷曲的括号块


编辑:

答案中的解决方案:

p = re.compile('\{\{*?.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
设置dotall标志——这允许。匹配换行符

p = re.compile('\{\{*.*\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
设置dotall标志——这允许。匹配换行符

p = re.compile('\{\{*.*\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
设置dotall标志

p = re.compile('\{\{*.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
在默认模式下,
匹配除换行符以外的任何字符。如果指定了DOTALL标志,则该标志将匹配包括换行符在内的任何字符

另外,括号之间需要非贪婪匹配:
*?
设置dotall标志

p = re.compile('\{\{*.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
>>> 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]], ...
在默认模式下,
匹配除换行符以外的任何字符。如果指定了DOTALL标志,则该标志将匹配包括换行符在内的任何字符

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

>>导入urllib2
>>> 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]], ...
>>>进口稀土 >>>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) >>>关于分项工程(p、s) “\n\n\n\n 1542年意大利战争\xe2\x80\x9346”是[[意大利战争]后期的一场冲突。。。
我已经在这里截断了输出,但是有足够的信息可以看到它正在工作。

>import urllib2
>>>进口稀土
>>>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)
>>>关于分项工程(p、s)
“\n\n\n\n 1542年意大利战争\xe2\x80\x9346”是[[意大利战争]后期的一场冲突。。。

我已经在这里截断了输出,但足够让我看到它正在工作。

Hmm->刚刚发现点与新行不匹配:Hmm->刚刚发现点与新行不匹配:当应用到提供的字符串时->它似乎删除了除最后[[]块之外的所有内容,对我来说,当应用到提供的字符串->时,它似乎删除了除最后[[]]块之外的所有内容。结果与sysrqb相同。[[]]块是剩下的全部。与sysrqb的结果相同。[[]]剩下的就是块了。