正则表达式删除管道分隔参差不齐的平面文件最后一列中的所有文本

regex to remove all text in last column of pipe-delimited ragged flat file

我有一个包含 3 列的参差不齐的 .pip、竖线分隔、引用限定的平面文件。记录结束分隔符是 carriage-return 换行符 ({CR}{LF})。示例文件是:

x|stuff|zz {CR}{LF}
ab|"some|thing"|"els|e" {CR}{LF}
"wh|at"|text|b {CR}{LF}

我需要删除最后(第 3)列中的文本,包括其列分隔符。所以,我希望上面的示例文件显示为:

x|stuff {CR}{LF}
ab|"some|thing" {CR}{LF}
"wh|at"|text {CR}{LF}

我想在 Notepad++ 中使用正则表达式查找替换。我的正则表达式(查找)应该是什么?我知道有一个类似的 post 用于此 (Regular expression to remove the last column from a pipe delimited file),但它似乎不适合我的情况。

您的搜索模式可以由文字竖线(必须转义)构成,后跟零个或多个非竖线字符(贪婪)并锚定在行尾。但我看到某些字段可能包含带引号的引号。所以你需要在单独的比赛中处理这些。试试这个:

\|("[^"]*"|[^|]*)$

我刚刚在您的示例数据集上测试了这个模式并确认它有效。您是否有任何引号字符需要转义的引号值?如果是这样,他们是如何逃脱的?带前导引号?用反斜杠?如果您在最后一列中确实有任何引用的数据并且里面有文字引号,那么使用 CSV 解析器而不是正则表达式可能会更好。