1

Javaファイル内のすべてのメソッド署名と前のコメント(コメントが存在する場合)に一致する正規表現をpythonで実行しようとしています。しかし同時に、クラス属性宣言と一致させたくありません。私のコードは次のとおりです。

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 に答える