我正在尝试编写一个正则表达式来匹配特定类型的类似 HTML 的括号标记。如果标签也在 HTML 注释中,则此表达式应该与标签匹配,并且组 1 与标签之间的内容匹配。
为了澄清,表达式应该匹配两者
[section]Blah blah blah[/section]
和
<!-- [section] -->Blah blah blah<!-- [/section] -->
这是我到目前为止所拥有的:
"(?:<!--\s*)?\[section](?:\s*-->)?(.*)(?:<!--\s*)?\[/section](?:\s*-->)?"
问题在于组 1(即 (.*)
)包含以下评论的潜在开始(即 <!--\s*
)。删除?
从第二个之后(?:<!--\s*)
获取组 1 以将其排除,但如果没有 HTML 注释语法,表达式将无法匹配标记。
如何让组 1 排除第二个评论开头(如果存在),同时仍然保持那里不会有评论开头的可能性?
最佳答案
在 .*
之后添加 ?
会使其变得“惰性”,因此它不会匹配任何额外的结束标记。
(?:<!--\s*)?\[section](?:\s*-->)?(.*?)(?:<!--\s*)?\[/section](?:\s*-->)?
关于python - 点匹配而不是 ? Python 正则表达式中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967616/