在行上的最后一个分号后匹配逗号

时间:2014-03-22 11:59:47

标签: regex csv notepad++

我有一个CSV文件,其数据以分号分隔。在文件的最后一列中,我有一个用逗号分隔的数字列表。我不想用分号替换这些逗号,所以它们就成了他们自己的专栏。

如何匹配每行上最后一个分号后的每个逗号?我不能用分号替换所有逗号,因为文件中的其他一些列也包含逗号。

我正在尝试在Notepad ++中替换它们。

189;1;data here, can contain commas;311,232,161,132,371

应该成为

189;1;data here, can contain commas;311;232;161;132;371

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

(?:;(?!.*;)|(?!^)\G)[^,]*\K,

替换为:

;

;(?!.*;)与上一个;匹配。它是;,后面没有其他;

(?!^)\G用于在上一场比赛结束时进行匹配。

(?:;(?!.*;)|(?!^)\G)表示匹配上一个;或上一场比赛的开头。

[^,]*将匹配非逗号,最后,\K会重置匹配项,以便您只匹配逗号。

regex101 demo

注意:并非所有版本的Notepad ++都支持\G\K(我不记得确切地实现了哪一个,可能是\G)。


以上更多......你所描述的。解决方法可能是这样的:

,(?!.*;)

匹配未提前,的{​​{1}}。并替换为;

答案 1 :(得分:3)

此正则表达式匹配逗号之间没有分号的逗号:

,(?=[^;]*$)

如果要删除此类逗号,请将匹配替换为空白。