我正在使用脚本在逗号分隔的文本文件中搜索和替换字符串。
将“可用”替换为“不可用”可以正常工作。
updateBook = updateBook.replace("available", "not-available")
但是,如果字符串包含单引号和/或逗号等字符,则会失败。
例如:
替换:'可用','6ba8c817-d72d-4593-8914-7a40d733b6db','free \ n'
with:'not-available','6ba8c817-d72d-4593-8914-7a40d733b6db','jorge'
我试过逃避引号和逗号失败了。
updateBook = updateBook.replace("\'available\'\, \'6ba8c817-d72d-4593-8914-7a40d733b6db\'\, \'free",
"\'not-available\'\, \'6ba8c817-d72d-4593-8914-7a40d733b6db\'\, \'jorge")
以下是代码
# Read in the file
updateBook = None
with open('books.txt', 'r') as f:
updateBook = f.read()
# Replace the target string
updateBook = updateBook.replace("'available', '6ba8c817-d72d-4593-8914-7a40d733b6db', 'free\n'",
"'not-available', '6ba8c817-d72d-4593-8914-7a40d733b6db', 'jorge'")
# Write changes to the file.
with open('books.txt', 'w') as f:
f.write(updateBook)
如果可以提供帮助,请立即行动。谢谢
答案 0 :(得分:0)
Regular expressions可能会对您有所帮助。这取决于您需要替换的一般程度。
import re
def repl(match):
d = match.groupdict()
d.update('one': 'non-available', 'two': '6ba8c817-d72d-4593-8914-7a40d733b6db', 'three': 'jorge')
s = '{preone}{one}{pretwo}{two}{prethree}{three}{postthree}'.format(**d)
original_string = 'available...'
escaped_values = map(re.escape, ['available', '6ba8c817-d72d-4593-8914-7a40d733b6db', 'free'])
regex_string = r'^(?P<preone>[\'\"])(?P<one>{0})(?P<pretwo>[\'\"],\s*[\'\"])(?P<two>{1})(?P<prethree>[\'\"],\s*[\'\"])(?P<three>{2})(?P<postthree>[\'\"])$'.format(*escaped_values)
replaced_string re.sub(regex_string, repl, original_string)