1
REGEXES = [(re.compile(r'cat'), 'cat2'),
           (re.compile(r'(if)(.*)(\r?\n)(\s*)(logger.info)(.*)'), '\1\2')]

for search, replace in REGEXES:
                    line = search.sub(replace, line)

なぜうまくいかないのか...

if( List != null ) {
   logger.info( "List is not null" );
   fieldSetContainerList.clear();
}

Notepad++ 正規表現検索置換で問題なく動作します。使用法: すべての if ステートメントの下にある logger.info ステートメントを削除したい。

4

1 に答える 1

1

生の文字列を使用する必要があります。

       (re.compile(r'(if)(.*)(\r?\n)(\s*)(logger.info)(.*)'), r'\1\2')]
                                                              ^ here

この修正により、正規表現が機能します。これがないと、文字列リテラルが解析されるときに\1\2が処理され、正規表現エンジンに到達することはありません。

ここに私のテストコードがあります:

import re

line = """if( List != null ) {
   logger.info( "List is not null" );
   fieldSetContainerList.clear();
}
"""

REGEXES = [(re.compile(r'cat'), 'cat2'),
           (re.compile(r'(if)(.*)(\r?\n)(\s*)(logger.info)(.*)'), r'\1\2')]

for search, replace in REGEXES:
    line = search.sub(replace, line)
print line

実行すると、これが出力されます

if( List != null ) {
   fieldSetContainerList.clear();
}
于 2013-01-21T20:17:59.997 に答える