python中的正则表达式:在双引号之间替换多次出现的逗号

时间:2018-05-08 09:55:16

标签: python regex

我正在尝试找到一种方法来替换csv文件中使用python在两个双引号之间发生的所有逗号。

鉴于此类意见:

abc,def,"ghi|jkl|mno",pqr,stu

我想得到:

(?<=\")(this here should match every comma)(?=\")

我尝试使用类似于以下内容的正面外观:

IsAuthReqSigned但我无法让它发挥作用。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

在替换部件中使用带有匿名或lambda函数的re.sub。

>>> import re
>>> s = 'abc,def,"ghi,jkl,mno",pqr,stu'
>>> re.sub(r'"[^"]+"', lambda x: x.group().replace(',', '|'), s)
'abc,def,"ghi|jkl|mno",pqr,stu'

注意:这不会处理转义引号并假设所有双引号都已正确平衡。

答案 1 :(得分:0)

这样一个更简单的方法可以为你工作:

string = 'abc,def,"ghi|jkl|mno",pqr,stu'
string_splited = string.split('"')
string_splited[1] = string_splited[1].replace(',', '|')

那会给你一个清单:

>>> string_splited
['abc,def,', 'ghi|jkl|mno', ',pqr,stu']

你可以重新组装

>>> '"'.join(string_splited)
'abc,def,"ghi|jkl|mno",pqr,stu'