【发布时间】:2018-06-12 17:44:58
【问题描述】:
我有以下字符串:
s = "XIDJIJFHD8","Gothika","a0KU000000JMYCrMAP","USA","English","Sub & Audio","VOD","SD","01/01/2011 00:00:00.000000","12/31/2049 00:00:00.000000",,"Confirmed",,,,"Feature",,"2003-11-21","2004-03-23",,"R","for violence, brief language and nudity.","2024863","6000008953",,,"10.5240/A6FC-02AE-8093-3B05-6240-T","10.5240/D052-B470-0D01-25DF-DA91-4","2024863_6000008953","idwb:2024863_6000008953","CA-0000950613"
我需要将其转换为“管道分隔”。字段用引号" 括起来,但如果字段为空,则不会有任何内容。最终输出中| 的数量应该是 31。这是我目前所拥有的:
re.sub(r'(\,|\")(,)(,|\")', '|', s)
但是,上面的长度只有 23。正确的正则表达式是什么?
或者,更好的是,也许我可以直接在 csv 模块中完成。比如:
string_with_pipes = csv.write(s, delimiter="|")
请注意,我只想获取修改后的字符串,而不是实际保存文件。
【问题讨论】:
-
正则表达式不起作用,因为连续的逗号被一个管道替换。实际上,它们应该用一个管道替换为每个
-
@ruaridhw 对,那该怎么做呢?
-
在下面查看我的答案 :) 通过在第一组和第三组的开头添加
(?来对原来的正则表达式进行一个小调整。您也不需要转义,或 " 字符和 | 可以替换为选择的允许字符。(\,|\")变为(?[,"])