替换python中引用的char beetween的最佳方法

2024-04-27 13:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件有这样一行:

1,2,"toto , titi",3"titi ,, tata",4

我想把引号(")之间的逗号,替换成冒号:

所以我的结论应该是:

1,2,"toto : titi",3"titi :: tata",4

我正在考虑用"分割,但我认为有更好的方法。你知道吗


Tags: 文件方法titi引号逗号toto冒号tata
3条回答

我认为,如果您使用csv模块解析CSV文件,如@Mateen Ulhaq@Tom Karzes所述,将是最好的选择。你知道吗

但是,如果您不想使用这个模块,您可以自己实现它。假设你总是有正确(偶数)的引号你能做的是:

  1. 按引号拆分
  2. 在每个奇数子串中用:替换,
  3. 用引号连接

可以在单行中完成:

 s = '1,2,"toto , titi",3"titi ,, tata",4'   
 result = '"'.join(w.replace(',',':') if i%2 else w for i,w in enumerate(s.split('"')))    

下面是另一个正则表达式:

>>> import re
>>>
>>> text = '1,2,"toto , titi",3"titi ,, tata",4'
>>> re.sub(r'(".+?")', lambda m: m.group(1).replace(',', ':'), text)
'1,2,"toto : titi",3"titi :: tata",4'

为此,可以使用正则表达式:

import re

string = '1,2,"toto , titi",3"titi ,, tata",4'

print(re.sub('".*?"',  lambda x: x.group().replace(',', ':'), string)) #Output 1,2,"toto : titi",3"titi :: tata",4

在regex的帮助下,re模块中的sub方法被替换。你知道吗

对于regex,应该使用非贪婪模式.*?,以避免,3:3替换

您可以测试regex online

然后用lambda函数替换匹配组中的逗号。你知道吗

相关问题 更多 >