两个字符串之间的正则表达式匹配?

我似乎找不到像以下示例中那样提取所有评论的方法。


>>> import re

>>> string = '''

... <!-- one 

... -->

... <!-- two -- -- -->

... <!-- three -->

... '''

>>> m = re.findall ( '<!--([^\(-->)]+)-->', string, re.MULTILINE)

>>> m

[' one \n', ' three ']

With块two -- --不匹配,很可能是因为糟糕的正则表达式。有人可以指出正确的方向如何提取两个字符串之间的匹配项吗?


嗨,我已经测试了你们在评论中提出的建议...。


>>> m = re.findall ( '<!--(.*?)-->', string, re.MULTILINE)

>>> m

[' two -- -- ', ' three ']

>>> m = re.findall ( '<!--(.*\n?)-->', string, re.MULTILINE)

>>> m

[' one \n', ' two -- -- ', ' three ']

谢谢!


回首忆惘然
浏览 550回答 3
3回答

肥皂起泡泡

通常,不可能使用规则语法在两个定界符之间进行任意匹配。具体来说,如果您允许嵌套,<!-- how do you deal <!-- with nested --> comments? -->您会遇到问题。因此,尽管您可以使用正则表达式解决此特定问题,但是您编写的任何正则表达式都可能会被其他奇怪的注释嵌套破坏。要解析任意注释,您需要继续使用解析上下文无关文法的方法。一种简单的方法是使用下推自动机。
打开App,查看更多内容
随时随地看视频慕课网APP