我正在尝试在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)
但它也会打印类属性注释和声明!
任何帮助将不胜感激
答案 0 :(得分:0)
1)你的正则表达式(public|private|protected).*
太宽泛了 - 它无法区分类属性(以; 结尾,不能包含 [(){}] )和方法原型(必须包含括号(..),然后是主体 {...} ,并且不能以; 结尾)
所以只需写一个更好的正则表达式。
2)另外,你的正则表达式需要capture groups。然后,请勿使用re.findall
,请使用匹配对象和only extract the group you want, i.e. the actual declaration