如何匹配特定字符并在遵循模式时将其排除

时间:2019-05-07 12:29:06

标签: python regex

我目前正在尝试在python中的csv中清除一些数据。但是我在csv中的引号有问题,因此希望您可以使用正则表达式来帮助我解决该问题。

csv的一行如下所示:

"""My name";"";"is";""Hello ; World"";"";

是否可以匹配多个引号,但可以使之与分号之间的引号不匹配

"" -> match

""" -> match

;""; -> not match

有人可以解决我的问题吗?谢谢

最诚挚的问候。

2 个答案:

答案 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;"";