2016-09-23 124 views
2

我一直在试图设计这个正则表达式,但对于我的生活,我不能让它不匹配,如果* /被击中特殊的单词之前。正则表达式匹配整个多行注释包含特殊字

我想匹配整个多行注释,只要它包含一个特殊的单词。我尝试了负面的lookaheads /后面,但我无法弄清楚如何正确地做到这一点。

这是我到目前为止有: (?s)(/\*.+?special.+?\*/)

我是关闭或可怕的关闭基地?我试过包括(?!\*/)失败。

https://regex101.com/r/mD1nJ2/3

编辑:我有一些多余的部分我删除了正则表达式。

回答

2

你不是完全关闭基地:(!介意改性剂,例如x详细模式)

/\*     # match /* 
(?:(?!\*/)[\s\S])+? # match anything lazily, do not overrun */ 
special    # match special 
[\s\S]+?   # match anything lazily afterwards 
\*/     # match the closing */ 

该技术被称为回火贪婪的象征,看到a demo on regex101.com


您可能想尝试另一种方法:分析您的文档,grep注释(使用例如 BeautifulSoup)并在其上运行字符串函数( if "special" in comment...)。

+1

Python're'支持're.DOTALL'修饰符,不需要使用'[\ s \ S]'解决方法,只需要点就可以。看,OP已经在使用dotall标志'(?s)'的内联版本。 –

+0

@WiktorStribiżew:我认为更多的是一种习惯 - 我认为''DOTALL''同样会好。 – Jan

+0

@WiktorStribiżew谢谢! – Lithium2142

相关问题