【问题标题】:Notepad++ regex to find lines with more than n pipe-charactersNotepad++ 正则表达式查找超过 n 个管道字符的行
【发布时间】:2017-08-18 17:47:27
【问题描述】:

我又一次遇到了 Notepad++ 中的正则表达式问题,因为我对此了解不多。
我有一个 .csv 文件,但我需要找到所有带有 n(比如说 4)或更多管道字符的行。
我拥有的字符串示例:

6454345|User1-2ds3|62562012032|9c1fe63ccd3ab234892beaf71f022be2e06b6cd1
3305611|User2-42g563dgsdbf|22023001345|c36dedfa12634e33ca8bc0ef4703c92b73d9c433
8749412|User3-9|xgs|f|98906504456|411b0fdf54fe29745897288c6ad699f7be30f389
5151540|User4-jy|n|12202310|6a54c608289f4aedfab63ca640bcd5d174fd8592

我需要找到这些字符串,它们有 4 个或更多竖线字符:

8749412|User3-9|xgs|f|98906504456|411b0fdf54fe29745897288c6ad699f7be30f389 
5151540|User4-jy|n|12202310|6a54c608289f4aedfab63ca640bcd5d174fd8592 

我在这里进行了一些搜索,但找不到我正在寻找的确切内容,到目前为止,我使用了这些问题中提供的答案,除此之外我没有找到任何类似的东西:
Find Lines with N occurrences of a char
Regular expression to match text that contains n or more of specified character
我用竖线字符替换了请求的字符,但这对我不起作用。

【问题讨论】:

  • 你是用|还是\|?请发布您尝试过的内容。另外,你需要用线条做什么?随便找?或者以任何方式替换/修改?
  • 我只需要找到这些行并手动修复它们,因为它们都需要不同的处理。这是我尝试过的,例如: ^[^|\\r\n]*(?:\|[^|\\r\n]*){4,}$ 或这个: (.*?\ |){4,} 和这个:^(|[^|]*){4,}
  • 只到 ([|][^|\n]*){4,}.*

标签: regex csv character notepad++


【解决方案1】:

您可以使用以下两个表达式中的任何一个来匹配具有 4 个管道的行:

^(.*?\|){4}

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

请注意,您需要关闭 . 匹配换行符选项才能使第一个模式起作用。

模式详情

  • ^ - 行首
  • (.*?\|){4} - 出现 4 次除换行符以外的任何字符,尽可能少,直到第一个 |,然后是 | 字符
  • [^|\r\n] - 匹配除 |、CR 和 LF 符号之外的任何字符。

【讨论】:

  • 试过了,好像这正是我想要的。非常感谢!
  • @Dyon:请注意,要在正则表达式中使用文字|,您需要对其进行转义,或者将其放入字符类[...]。当在一个字符类中时,许多字符失去了它们的特殊含义:[(){+$] 匹配单个字符,它可以是文字 (){+$ 符号。
猜你喜欢
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多