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

有了这个修复,你的正则表达式对我有用。没有它,\1and\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 回答