regex - 正则表达式匹配在 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。
解决方案
假设您没有转义|
或|
在引用的单元格值内,您可以使用此正则表达式进行匹配:
^((?:[^|\n]*\|){3})(?![\r\n])
并将其替换为:
$1\n
正则表达式详细信息:
^
: 开始(
: 开始捕获组 #1(?:[^|\n]*\|){3}
:
)
: 结束捕获组(?![\r\n])
:负前瞻断言我们没有\r
或\n
领先于当前位置
推荐阅读
- python - Heroku 上的 Django + Celery 应用程序在本地工作,但部署时工作人员超时
- sql - 从开始和结束日期获取每个月的条目的 SQL 最佳方法
- javascript - 我可以在 javascript 的选择列表上使用 onblur 吗?
- c++ - GCC:ld.exe 找不到文件
- sql - CASE 语句中关于 WHEN 的 GROUP BY 问题
- regex - 正则表达式:在文本中查找标记的字符串
- batch-file - 在 VsCode 中的按键上执行 bat 文件
- c++ - 在类型已知的情况下尝试跳过 vtable 和内联调用
- c++ - 使用 boost 元解析字符串解析包含的文件
- java - 是否可以使用 Java Google Sheets API 获取最后修改日期>特定日期的行