使用正则表达式可以要求匹配不在:
之内\
是转义字符); //
评论; /*
到*/
评论。因此,如果我正在搜索foo
,我希望
bar("// foo\"", foo, /* foo // */ 2, 3); // foo
仅匹配第二个实例。单独地,单独匹配积极条件不是问题:
"((?:[^"\\]|\\.)*)"
; //(?:.*?)
; /\*(?:.*?)\*/
。但是我不确定如何将所有这些始终如一地组合(然后如何随后否定条件)。如果//
不在双引号字符串中,则re
是单行注释。与多行评论类似。
我正在使用Python的{{1}}模块进行匹配。
答案 0 :(得分:0)
你到底想要实现什么目标?使用正则表达式肯定可以做到这一点,但看起来你试图通过返回 not 注释的所有内容来从C代码中删除注释。一种更简单的方法可能是使用re.sub
将与注释匹配的任何内容替换为空字符串。然后你可以使用你已经开发的正则表达式:
mycode = ...
patterns = [r'"((?:[^"\\]|\\.)*)"', r'//(?:.*?)', r'/\*(?:.*?)\*/']
for pattern in patterns:
mycode = re.sub(pattern, '', mycode)
此代码未经过测试,我怀疑当您在多行文档上测试时,您的正则表达式会遇到问题。具体来说,请查看re.M标记以及^
和$
表达式。您也不需要非捕获括号。