Python Regex for java方法签名,带有前面的注释,没有类属性声明

时间:2012-10-11 21:28:53

标签: java python regex method-signature

我正在尝试在python中执行一个正则表达式,它将java文件中的每个方法签名与前面的注释匹配(如果存在注释)。但与此同时,我不希望它匹配类属性声明。 我的代码是:

st:'''
/**
 class attribute comments
 */
private Type class_attribute1;

private Type class_attribute2;

/**
 * method1 comments.
 */
public Returnvalue method1(arguments OR no arguments) {
    method1 body
}

private Returnvalue method2(arguments OR no arguments) {
           method2 body
}'''

   import re

   print re.findall(r"([/][*].*?[*][/].*?(public|private|protected).*?{|\s(public|private|protected).*?{)", st, re.DOTALL)

但它也会打印类属性注释和声明!

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

1)你的正则表达式(public|private|protected).*太宽泛了 - 它无法区分类属性(以; 结尾,不能包含 [(){}] )和方法原型(必须包含括号(..),然后是主体 {...} ,并且不能以; 结尾) 所以只需写一个更好的正则表达式。

2)另外,你的正则表达式需要capture groups。然后,请勿使用re.findall,请使用匹配对象和only extract the group you want, i.e. the actual declaration