为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

回首忆惘然 2019-12-06 10:11:56

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


>>> 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 ']

谢谢!


查看完整描述

3 回答

?
慕哥6287543

这应该可以解决问题


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


查看完整回答
反对 回复 2019-12-06
?
慕仰0522570

通常,不可能使用规则语法在两个定界符之间进行任意匹配。


具体来说,如果您允许嵌套,


<!-- how do you deal <!-- with nested --> comments? -->

您会遇到问题。因此,尽管您可以使用正则表达式解决此特定问题,但是您编写的任何正则表达式都可能会被其他奇怪的注释嵌套破坏。


要解析任意注释,您需要继续使用解析上下文无关文法的方法。一种简单的方法是使用下推自动机。


查看完整回答
反对 回复 2019-12-06
?
holdtom

看起来它们在HTML中是不可能的。stackoverflow.com/questions/442786/…我将在此保留,因为我认为认识到这一点很重要,但是我不希望有任何投票

查看完整回答
反对 回复 2019-12-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信