找到python的替换文本有很多线程,但我认为我的问题不同。
我有一堆带
的java文件System.out.println("some text here");
我正在尝试编写一个python脚本,用
替换它们if (logger.isInfoEnabled()) {
logger.info("some text here");
}
要做到这一点,我尝试过:
def findReplace(fileName, sourceText, replaceText):
file = open(fileName, "r") #Opens the file in read-mode
text = file.read() #Reads the file and assigns the value to a variable
file.close() #Closes the file (read session)
file = open(fileName, "w") #Opens the file again, this time in write-mode
file.write(text.replace(sourceText, replaceText)) #replaces all instances of our keyword
# and writes the whole output when done, wiping over the old contents of the file
file.close() #Closes the file (write session)
并传入:
filename=Myfile.java, sourceText='System.out.println', replaceText='if (logger.isInfoEnabled()) { \n' \logger.info'
然而,我正在努力争取在替换中获得结束。它需要包围已经存在的相同输出字符串。有小费吗?
感谢。
答案 0 :(得分:4)
import re
sourceText = 'System\.out\.println\(("[^"]+")\);'
replaceText = \
r'''if (logger.isInfoEnabled()) {
logger.info(\1);
}'''
re.sub(sourceText, replaceText, open(fileName).read())
这并不完美 - 只有在字符串不包含任何转义引号(即\"
)时它才会起作用 - 但希望它可以解决这个问题。
答案 1 :(得分:3)
你肯定会遇到麻烦,因为围绕匹配分隔符做替换是很困难的。对我来说更有意义的一种方法 - 出于更多原因而不是一个 - 是定义一个新的java函数log_if_enabled
,然后用System.out.println
替换log_if_enabled
。这样,你不必担心做任何花式大括号匹配。此外,在函数中封装if
语句是DRY。