【发布时间】:2020-08-02 08:47:00
【问题描述】:
假设我有以下字符串:
stringX = ['187-49481,14',
'181-457216',
'196,61-04-22',
'1972-10-28',
'19,940-04-16',
'2017-08,8-29',
'2014-04-18']
请注意,我有两种类型的字符串:类型 181-457216 和类型 1972-10-28(日期) 我正在修改 CSV,由于某种原因(仔细查找,没有找到任何原因),它有时 - 显然是随机地 - 在这些类型的字符串中的数字之间插入逗号。
所以我想要完成的是通过正则表达式检测这些逗号并将它们替换为空(删除逗号)。
说第一种类型的字符串,即:'187-14,412' 我一直在尝试:
re.sub(r'\d+\-\d+(\,)\d+', '', stringX)
在这个例子中,逗号是第 1 组,但我如何在这个正则表达式中指定子组(1)?
我也一直在尝试lookbehind和lookahead,但是lookbehind有问题:
(?<=\d+\-\d+)(\,)(?=\d+)
Err: lookbehind assertion is not fixed length at offset 0
如果有更好的方法来正则表达式这些字符串,或者能够在 re.sub 上指定 group(1),我正在徘徊
【问题讨论】:
-
我的建议是仔细研究为什么修改 CSV 文件的代码会产生错误(也许在这里发布一个问题)。试图解决错误(尤其是当它们出现在您自己的代码中时)是一种愚蠢的游戏。但是,要删除逗号,为什么不将它们转换为空字符串。为此,您甚至不需要正则表达式。
-
似乎除了逗号之外修改 CSV 文件的代码还会在数据条目中插入一个额外的数字。 187-49481,14 应该是 187-494814, 196,61-04-22 -> 1961-04-22 等等。