如何通过python删除大括号包围的块
示例文本: 字符串 -> rev 标签内的内容(通过 lxml)。
我正在尝试删除文本中的 {{BLOCKS}}。
我使用以下正则表达式来删除简单的单行块:
p = re.compile('\{\{*.*\}\}')
nonBracketedString = p.sub('', bracketedString)
但是,这不会删除内容开头的第一个多行括号部分。如何删除多行大括号块?
编辑:
答案的解决方案:
p = re.compile('\{\{*?.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
Sample text: String -> content within the rev tag (via lxml).
I'm trying to remove the {{BLOCKS}} within the text.
I've used the following regex to remove simple, one line blocks:
p = re.compile('\{\{*.*\}\}')
nonBracketedString = p.sub('', bracketedString)
However this does not remove the first multi line bracketed section at the beginning of the content. How can one remove the multi-line, curly bracketed blocks?
EDIT:
Solution from answer:
p = re.compile('\{\{*?.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
设置 dotall 标志。
在默认模式下,
.
匹配除换行符之外的任何字符。如果指定了 DOTALL 标志,则它匹配包括换行符在内的任何字符。http://docs.python.org/library/re.html
另外,您括号之间需要非贪婪匹配:
.*?
Set the dotall flag.
In the default mode,
.
matches any character except a newline. If the DOTALL flag has been specified, this matches any character including a newline.http://docs.python.org/library/re.html
Also, you'll need a non-greedy match between the brackets:
.*?
我在这里截断了输出,但足以看出它正在工作。
I've truncated the output here, but there's enough to see that it's working.
设置 dotall 标志——这允许 .匹配换行符。
Set the dotall flag-- this allows . to match newlines.