【发布时间】:2012-09-26 00:13:05
【问题描述】:
我似乎找不到像以下示例中那样提取所有 cmets 的方法。
>>> import re
>>> string = '''
... <!-- one
... -->
... <!-- two -- -- -->
... <!-- three -->
... '''
>>> m = re.findall ( '<!--([^\(-->)]+)-->', string, re.MULTILINE)
>>> m
[' one \n', ' three ']
与two -- -- 的块不匹配很可能是因为正则表达式错误。有人可以指出我正确的方向如何提取两个字符串之间的匹配项。
您好,我已经测试了你们在 cmets 中的建议....这里是一个有效的解决方案,几乎没有升级。
>>> m = re.findall ( '<!--(.*?)-->', string, re.MULTILINE)
>>> m
[' two -- -- ', ' three ']
>>> m = re.findall ( '<!--(.*\n?)-->', string, re.MULTILINE)
>>> m
[' one \n', ' two -- -- ', ' three ']
谢谢!
【问题讨论】:
-
[] 之间的任何内容都是单个字符,因此 (-->) 不会查找该分组是问题的一部分...
-
re.findall('<!--(.*?)-->', string, re.DOTALL)应该可以。你在这里不需要^\(-->),因为问号使它不贪婪。 -
您看起来只是在寻找单词?如果是这样,
m = re.findall('[\w]+', string, re.MULTILINE)有什么问题?此外,字符串对于一个,嗯,字符串来说是一个非常糟糕的名字。
标签: python regex python-3.x regex-negation