我似乎找不到一种方法来提取所有评论,就像下面的例子。
>>> import re
>>> string = '''
... <!-- one
... -->
... <!-- two -- -- -->
... <!-- three -->
... '''
>>> m = re.findall ( '<!--([^\(-->)]+)-->', string, re.MULTILINE)
>>> m
[' one \n', ' three ']
带有two -- --
的块最有可能是因为错误的正则表达式而不匹配。谁能给我指出正确的方向如何提取两个字符串之间的匹配。
嗨,我已经测试了你们在评论中提出的建议...这是一个很小的升级就可以工作的解决方案。
>>> m = re.findall ( '<!--(.*?)-->', string, re.MULTILINE)
>>> m
[' two -- -- ', ' three ']
>>> m = re.findall ( '<!--(.*\n?)-->', string, re.MULTILINE)
>>> m
[' one \n', ' two -- -- ', ' three ']
谢谢!
发布于 2012-10-05 05:24:10
这应该能起到作用
m = re.findall ( '<!--(.*?)-->', string, re.DOTALL)
发布于 2012-10-05 05:25:10
通常,不可能使用regular grammar在两个分隔符之间进行任意匹配。
具体地说,如果您允许嵌套,
<!-- how do you deal <!-- with nested --> comments? -->
你会遇到问题的。因此,虽然您可以使用正则表达式解决此特定问题,但您编写的任何正则表达式都可能被其他奇怪的注释嵌套所破坏。
要解析任意注释,您需要转到解析context free grammars的方法。一种简单的方法是使用pushdown automaton。
https://stackoverflow.com/questions/12736074
复制相似问题