我目前正在尝试在python中的csv中清除一些数据。但是我在csv中的引号有问题,因此希望您可以使用正则表达式来帮助我解决该问题。
csv的一行如下所示:
"""My name";"";"is";""Hello ; World"";"";
是否可以匹配多个引号,但可以使之与分号之间的引号不匹配
"" -> match
""" -> match
;""; -> not match
有人可以解决我的问题吗?谢谢
最诚挚的问候。
答案 0 :(得分:2)
使用正向查找和向后查找:
import re
s='"""My name";"";"is";""Hello ; World"";"";'
In: re.sub(r'(?<=[^;"])"+|"+(?=[^;"])',r'@',s)
Out: '@My name@;"";@is@;@Hello ; World@;"";'
编辑:
(?<=[^;"])"+ matches quotes not preceeded by other quotes or ;
"+(?=[^;"]) matches quotes not followed by other quotes or ;
答案 1 :(得分:0)
这似乎可行:
ln = '"""My name";"";"is";""Hello ; World"";"";'
ln_arr = ln.split(";")
print(ln_arr)
for i, val in enumerate(ln_arr):
if val != '""':
ln_arr[i] = ln_arr[i].replace('""','')
print(ln_arr)
ln = ';'.join(ln_arr)
print(ln)
输出:
['"""My name"', '""', '"is"', '""Hello ', ' World""', '""', '']
['"My name"', '""', '"is"', 'Hello ', ' World', '""', '']
"My name";"";"is";Hello ; World;"";