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

时间:2016-02-03 17:15:02

标签: regex notepad++

我有一个参差不齐的.pip,管道分隔,引用限定的平面文件,包含3列。记录结束分隔符是回车换行({CR} {LF})。示例文件是:

String numericKeyValue = jp.getText()

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

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

我想在Notepad ++中使用正则表达式find-replace。我的正则表达式(找到)应该是什么?我知道有一个类似的帖子(Regular expression to remove the last column from a pipe delimited file),但它似乎对我的情况不起作用。

1 个答案:

答案 0 :(得分:1)

您的搜索模式可以通过文字管道(必须转义)构建,然后是零或更多非管道字符(贪婪)并锚定在行尾。但我发现有些字段可能包含带管道的引用值。所以你需要在单独的比赛中处理这些。试试这个:

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

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