首页 > 解决方案 > 正则表达式匹配在 Notepad++ csv 中不具有恰好三个管道的行

问题描述

我有一个以管道分隔的 csv。每行应该只有三个管道来分隔列。我需要找到任何没有三个管道的行 - 更多或更少应该匹配。

我正在学习正则表达式,我想出了这个(有点像一起寻找我认为可行的部分......)

^(?:[^|\r\n]*\|){3,}.*$

但是,它只是匹配所有行,而不考虑行中的管道数。

我想做的正确语法是什么?

[更新]

正如@anubhava 指出的那样,我应该提供一个例子。

这是我文件中的示例数据:

John Doe|1hgds234|Some comment|
Mary Jane|5df678|This column is the end of this record|Harry Jones|3456|Harry's record should be on the next line|
Sue Anderson|037dsf533|Another comment|

Harry Jones 的记录应该从新的线路开始,从“Harry”开始。每条线都以管道和 CRLF 结束。

所以我需要一个匹配第二行的正则表达式的查找/替换,并在第二行的第三个管道之后放置一个 CRLF。

标签: regexnotepad++

解决方案


假设您没有转义||在引用的单元格值内,您可以使用此正则表达式进行匹配:

^((?:[^|\n]*\|){3})(?![\r\n])

并将其替换为:

$1\n

正则表达式演示

正则表达式详细信息:

  • ^: 开始
  • (: 开始捕获组 #1
    • (?:[^|\n]*\|){3}
  • ): 结束捕获组
  • (?![\r\n]):负前瞻断言我们没有\r\n领先于当前位置

推荐阅读