繁体   English   中英

Python正则表达式不匹配行尾

[英]Python regular expression not matching end of line

我正在尝试使用相当复杂的正则表达式来匹配C / C ++函数定义。 我发现了一个不起作用的案例,我试图理解为什么。 这是输入字符串不匹配:

   void Dump(const char * itemName, ofstream & os)

这显然是一个有效的C ++方法声明。 这是RE:

   ^[^=+-|#]*?([\w<>]+\s+(?!if|for|switch|while|catch|return)\w+)\s*\([^;=+-|]*$

这基本上试图区分其他看起来像方法声明的C语法,即具有单词后跟paransheses的语法。

使用非常有用的Python正则表达式调试器(http://www.pythonregex.com/)我将其缩小到尾随“$” - 如果我删除正则表达式中的尾随$,它匹配上面的方法签名; 如果我留在$,它不会。 必须有一些Python RE的特性,这是我在这里躲避的。 谢谢。

使用+-| 在你的角色类中[^;=+-|]是一个范围规范。 这将导致包含(实际排除,因为您正在使用^ )的字符类远远超出您的意图。 要指定文字-在字符类中,首先提及它,如[^-;=+|]

PythonRegex的输出有点误导。 r.groups()r.findall()结果都是相同的: u'void Dump' ,这是第一个捕获组的内容。 如果它显示了整个匹配,你会看到当删除$你只是匹配

void Dump(

...不是你想要的整个功能定义。 原因(正如Greg解释的那样)是你上一个字符类中的语法错误。 您需要首先列出连字符( [^-;=+|] )或最后( [^;=+|-] ),或者添加反斜杠( [^;=+\\-|] )来转义连字符。

我能看到让PythonRegex显示整个匹配的唯一方法是删除所有捕获组(或将它们转换为非捕获组)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM