不使用正则表达式,而是使用Python的字符串函数来查找并转义字符串中左右最外层引号之间的引号。它使用字符串的.find()
和.rfind()
方法来查找包围的"
字符。然后对任何出现在外部引号内的额外"
字符进行替换。这样做不会假设用,
分隔符分隔的包围引号的位置,因此它将保留任何周围的空格不变(例如,它会将每行末尾的'\n'
保持原样)。
def escape_internal_quotes(item):
left = item.find('"') + 1
right = item.rfind('"')
if left < right:
item = item[:left] + item[left:right].replace('"', '\\"') + item[right:]
return item
line = '"0","0.23432","234.232342","data here dsfsd hfsdf","3/1/2016",,"etc","E 60"","AD"8"\n'
escaped = [escape_internal_quotes(item) for item in line.split(',')]
print(repr(','.join(escaped)))
导致:
结果为:
'"0","0.23432","234.232342","data here dsfsd hfsdf","3/1/2016",,"etc","E 60\\"","AD\\"8"\n'
E 60
部分)。我认为我还需要将其他字符串的其余部分变得更加灵活,而不是限制在单个数字和字母中(请参见更新后的原始帖子示例)。 - sundance"
字符不同。我认为这样做可以,虽然可能不够高效:r'(?<!^)(?<!,)\"(?!,|$)'
。 - sundance