管道分隔数据需要Regex Pattern

时间:2017-04-13 05:06:49

标签: java regex

我的管道分隔数据如下:

3985199||"ER1AA"|"2017"|"BMC PUBLIC HEALTH"|"17"||"2017-04-09-00.53.55.353280 -0400"|0|"1471-2458"|"13941J"|"C ,CC,D ,ES,JS,Q ,XC"|"A"|"N"|"APR 4  17"

如何在没有使用正则表达式的双引号的情况下获取BMC PUBLIC HEALTH。

提前致谢。

4 个答案:

答案 0 :(得分:1)

  1. 首先删除所有引号
  2. 然后按\|+
  3. 拆分

    因为,SO支持Javascript实现,因此以下Javascript代码段是为了让您了解如何实现它:

    const regex = /\|+/g;
    const str = `3985199||"ER1AA"|"2017"|"BMC PUBLIC HEALTH"|"17"||"2017-04-09-00.53.55.353280 -0400"|0|"1471-2458"|"13941J"|"C ,CC,D ,ES,JS,Q ,XC"|"A"|"N"|"APR 4 17"
    `;
    console.log(str.replace(/"/g,``).split(regex));

答案 1 :(得分:0)

以下一般模式应该有效:

(?:(?:"(.*?)")|(.*?))(?:$|\|+)

这匹配每个术语后跟一个或多个管道,或后跟字符串的结尾。换句话说,这涵盖了管道分隔字符串中的每个术语。

根据您使用的语言/工具,您可能不想使用它。您可能希望在管道上拆分字符串并以这种方式收集术语。但是如果你想在Notepad ++等编辑器中逐步完成这些术语,那么我给你的正则表达式会很好。如果您想要使用Notepad ++之类的东西删除每个术语的引号,那么这也是一个很好的起点。

在这里演示:

Regex101

答案 2 :(得分:0)

String input = "3985199||\"ER1AA\"|\"2017\"|\"BMC PUBLIC HEALTH\"|\"17\"||\"2017-04-09-00.53.55.353280 -0400\"|0|\"1471-2458\"|\"13941J\"|\"C ,CC,D ,ES,JS,Q ,XC\"|\"A\"|\"N\"|\"APR 4  17\"";
    String[] arr = input.split("\"?\\|+\"?|\"");
    for (String ele : arr) {
        System.out.println(ele);
    }

答案 3 :(得分:0)

对于Java,我建议OpenCSV。例如。阅读整个文件:

CSVReader reader = new CSVReader(new FileReader("yourfile.txt"), '|');
List myEntries = reader.readAll();