我一直想知道如何让Python在我的查找和替换函数中忽略双引号(“)中的字符。我的代码是:
def findAndReplace(textToSearch, textToReplace,fileToSearch):
oldFileName = 'old-' + fileToSearch
tempFileName = 'temp-' + fileToSearch
tempFile = open( tempFileName, 'w' )
for line in fileinput.input( fileToSearch ):
tempFile.write( line.replace( textToSearch, textToReplace ) )
tempFile.close()
# Rename the original file by prefixing it with 'old-'
os.rename( fileToSearch, oldFileName )
# Rename the temporary file to what the original was named...
os.rename( tempFileName, fileToSearch )
假设我们的文件(test.txt)有内容(这是我们的实际文本):
我喜欢你的代码“我喜欢你的代码”
我执行
findAndReplace('code','bucket',test.txt)
将以下内容写入我的文件:
我喜欢你的水桶“我喜欢你的水桶”
但是,我希望它跳过双引号部分并将其作为结果
我喜欢你的桶“我喜欢你的代码”
我应该在源代码中添加什么内容?
提前致谢
答案 0 :(得分:4)
haystack = 'I like your code "I like your code"'
needle = "code"
replacement = "bucket"
parts = haystack.split('"')
for i in range(0,len(parts),2):
parts[i] = parts[i].replace(needle,replacement)
print '"'.join(parts)
假设您不能使用嵌套引号...
答案 1 :(得分:1)
如果你不需要在引号内处理引号,或者类似的东西,这很容易。你可以用正则表达式来做。但是,因为我猜你不知道正则表达式(或者你本来会使用它),让我们用简单的字符串方法来做:split
你的字符串引用字符,然后是{{1}只有偶数子串,然后replace
回到一起:
join