【问题标题】:Matching commas after the last semicolon on a row匹配一行最后一个分号后的逗号
【发布时间】:2014-03-22 11:59:46
【问题描述】:

我有一个 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

【问题讨论】:

  • 你有什么版本的 N++?
  • @Jerry 6.5.4。这应该没关系吧?
  • 可以使用前瞻 ,(?=[^;]+$) 替换为:; 替换逗号,而不是后跟分号到行尾。

标签: regex csv notepad++


【解决方案1】:

你可以这样使用:

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

替换为:

;

;(?!.*;) 匹配最后一个 ;。这是一个;,后面没有另一个;

(?!^)\G 用于匹配上一场比赛的结尾。

(?:;(?!.*;)|(?!^)\G) 表示要么匹配最后一个;,要么匹配上一个匹配的开始。

[^,]* 将匹配非逗号,最后,\K 重置匹配以允许您仅匹配逗号。

regex101 demo

注意:并非所有版本的 Notepad++ 都支持 \G\K(我不记得具体是哪个版本最先实现的,可能是 \G)。


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

,(?!.*;)

匹配前面没有;,。并替换为;

【讨论】:

  • @MikkoP 很高兴为您提供帮助 :)
  • @Jerry,哇,不知道这个结构,太疯狂了。谢谢!
【解决方案2】:

这个正则表达式匹配一个逗号,它和行尾之间没有分号:

,(?=[^;]*$)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多