Notepad++ 删除第六个逗号之后的所有逗号

Notepad++ 删除第六个逗号之后的所有逗号

我有许多 csv 文件,每行的逗号数量都不同。我想删除一行中超过 6 个的逗号,但如果只有 6 个逗号,则保留该行。

如果逗号超过 6 个,则此正则表达式会删除多余的逗号:

^([^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*),(.*)$

并替换为

\1\2

我遇到的问题是,如果我对所有文件运行此命令,如果它发现一行只有六个逗号,它就会移动并包含下一行。我如何将其限制为每一行?

感谢大家。

例子:

c1,c2,c3,c4,c5,c6,c7
asdf,asdf,asdf,asdf,asdf,asdf,asdf
asdf,asdf,asdf,asdf,asdf,asdf,asdf,,,asdf,asdf
asdf,asdf,asdf,asdf,asdf,asdf,asdf,,

我希望以此结束:

c1,c2,c3,c4,c5,c6,c7
asdf,asdf,asdf,asdf,asdf,asdf,asdf
asdf,asdf,asdf,asdf,asdf,asdf,asdfasdfasdf
asdf,asdf,asdf,asdf,asdf,asdf,asdf

答案1

问题是[^,]匹配除 之外的所有字符,,包括换行符。将其替换为[^,\r\n]就可以了。

您可以使用数字重复计数来缩短正则表达式:^((?:[^,\r\n]*,){6}[^,\r\n]*),(.*)$

请注意,您的正则表达式将在字段中包含带引号的逗号的 csv 文件中失效。修复此问题非常麻烦,并且取决于您使用的确切 csv 格式。(不幸的是,没有标准。)

还要注意,用 替换正则表达式\1将删除第七个字段之后的所有内容。如果您确实只想删除逗号并连接所有后面的字段(如示例输出所示),则应使用\1\2作为替换并反复执行“全部替换”,直到不再找到任何匹配项。

答案2

以下是一次性完成这项工作的方法:

  • Ctrl+H
  • 找什么:(?:^(?:.*?,){6}|\G(?!^)).*?\K,
  • 用。。。来代替:LEAVE EMPTY
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline*
  • Replace all

解释:

(?:             # non capture group
    ^           # beginning of line
    (?:         # non capture group
        .*?     # 0 or more any character, not greedy
        ,       # a comma
    ){6}        # end group, must appear 6 times
  |             # OR
    \G          # restart from last match position
    (?!^)       # negative lookahead, make sure we are not at the beginning of a line
)               # end group
.*?             # 0 or more any character, not greedy
\K              # forget all we have seen until this position
,               # a comma

屏幕截图(之前):

在此处输入图片描述

屏幕截图(之后):

在此处输入图片描述

相关内容