1

我正在尝试在 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)

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

任何帮助,将不胜感激

4

1 回答 1

0

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

2)此外,您的正则表达式将需要捕获组。然后不要使用re.findall,使用匹配对象,只提取你想要的组,即实际声明

于 2014-04-11T10:11:49.857 回答