Python正则表达式在源代码中找到非重复语句

时间:2014-09-24 14:55:10

标签: python regex

假设我有类似下面的源代码,假设在语法上是完全有效的:

MyType basket("woven"); // initialize statement

double x = 0; // miscellaneous code

MyType bucket("plastic") ; // another initialize statement

for(int i=0; i<324; ++i ) { cout << i << "\n"; }

/* example of a disposal statement */
MyType basket(); 

我想要做的是检测语句MyType bucket("plastic");,因为没有后续的相应MyType bucket();语句。

使用Python,我构造了以下正则表达式(使用DOTALLMULTILINE选项)。但是有一个问题,我不知道它是什么。

(?P<stmt>MyType\s+[a-zA-Z0-9_]+)\(\s*"|'[^"']+"|'\s*\)\s*;[^(?P=stmt)]*$

基本上,我需要知道如何使用命名组(如(?P=stmt>))并检查它的重复。

2 个答案:

答案 0 :(得分:2)

使用这个:

(MyType\s+(\S+)\([^)]+\)\s*;)(?!.*MyType\s+\2\(\s*\)\s*;)

以下是demo

答案 1 :(得分:2)

MyType\s*(\w+)\S+\s*;(?!.*?MyType\s*\1)

试试这个。看看演示。

http://regex101.com/r/zR2tR4/20