在记事本++中从行中删除多余的管道

时间:2019-10-10 10:58:38

标签: regex replace pipe notepad++

我有一个管道定义的txt文件,中间有一个自由文本列,有时自由文本包含一个管道,当我将其导入Excel时会抛出整个文件。

我知道每行应有4个管道,因此我想标识具有4个以上管道的行,并用空格替换第3个。

位置|日期|评论|系统|

NYC | 2019年10月10日|正确| windows |

洛杉矶| 10.10.2019 |错误| 5 | windows |

芝加哥| 2019年10月10日|错误3 | Linux |

我已经弄清楚了如何识别具有4个以上管道的线:

^([^|\r\n]*\|){5}

我无法找到如何更换第三根管道。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

逻辑是:捕获N-1个非管道数,后接一个管道,并将以下0个或多个非管道归入组1,然后匹配第N个管道,然后捕获M-N非管道字符的数量,然后加上管道(N是要删除出现的管道,M是一行中应该有多少个管道)。

您可以使用

查找内容^((?:[^|\r\n]*\|){2}[^|\r\n]*)\|((?:[^|\r\n]*\|){2})
替换为$1 $2

详细信息

  • ^-一行的开头
  • ((?:[^|\r\n]*\|){2}[^|\r\n]*)-捕获组1($1):两次重复,分别是管道+ LF和CR以外的0+个字符,接着是管道,然后是管道+ LF和CR <以外的0+个字符< / li>
  • \|-第三个|
  • ((?:[^|\r\n]*\|){2})-捕获组2($2):两个重复的0+字符(管道,LF和CR除外),后跟管道。

测试和设置:

enter image description here