Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 管道分隔数据需要正则表达式模式_Java_Regex - Fatal编程技术网

Java 管道分隔数据需要正则表达式模式

Java 管道分隔数据需要正则表达式模式,java,regex,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公共卫生,而无需双引号 提前谢谢 首先删除所有引号 然后按\\\+ As、SO支持Javascript实现,因此下面的Javascript

我有管道分隔数据,如下所示:

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公共卫生,而无需双引号

提前谢谢

  • 首先删除所有引号
  • 然后按
    \\\+
  • As、SO支持Javascript实现,因此下面的Javascript代码片段将告诉您如何实现它:

    const regex=/\\\+/g;
    const str=`3985199 | | |“ER1AA”|“2017”|“BMC公共卫生”|“17”|“2017-04-09-00.53.55.353280-0400”| 0 |“1471-2458”|“13941J”|“C、CC、D、ES、JS、Q、XC”|“A”|“N”|“4.17”
    `;
    
    console.log(str.replace(/“/g,``).split(regex));
    以下常规模式应该可以工作:

    (?:(?:"(.*?)")|(.*?))(?:$|\|+)
    
    这将匹配后跟一个或多个管道的每个术语,或后跟字符串的结尾。换句话说,这将覆盖管道分隔字符串中的每个术语

    根据您使用的语言/工具的不同,您可能不希望使用此选项。您可能希望在管道上拆分字符串并以这种方式收集术语。但是,如果您希望在诸如Notepad++之类的编辑器中逐步遍历术语,我给您的正则表达式将很好地工作。如果您希望(例如)删除使用记事本++之类的东西引用每个术语

    此处演示:

    对于Java,我建议您阅读整个文件:

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

    您使用的语言/工具是什么?只需在
    |
    上拆分并在之后“取消引用”您的字段。到目前为止您尝试了什么?不要使用正则表达式。使用最适合此工作的工具。这是CSV的一种变体,带有字段分隔符栏:改用任何CSV库(因为CSV看起来很简单,但实际上没有那么简单)。即使是Microsoft Excel的CSV导入也应该能够完成任务。投票结束时,您可能不清楚您的要求。是什么让您认为这是
    JS
    ?OP还没有告诉我们。是什么让您认为stackoverflow覆盖的语言不能代表虚拟impl?显然可以,但每种语言都有其微妙之处。这一impl如果数据中有转义引号或带引号的条形字符,entation将失败。home-CSV读取并不像看上去那么简单。语言没有被提及,而且我不认为用一种语言编写的简单问题无法翻译成另一种语言。感谢您的回答。在您的演示中,您尽可能地错过了双管道在我的问题“3985199 | |”中的e。这意味着第二个字段为空。我也必须匹配空值。同样,我不想匹配管道。@Prakash我认为双管道是错误的。让我更新我的正则表达式。我必须在以下代码中使用这个正则表达式:公共类模式{psvm(字符串args[]){String line=“3985199 | | ER1AA\”\124;“2017\”|\“BMC公共卫生”BMC公共卫生“BMC公共卫生”的“BMC公共卫生”的“BMC公共卫生”的“BMC公共卫生”的“BMC公共卫生”的“17”17”17”17”17”12”17”17”17”12”17”17”17”17”17”17”17”17”5.55.35.353280-040-040”0”0”0”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”4”10”10”10”10”10”10”10”10”10”10”4”10”10”10”10”10”10”10”10”10”10”10”10”10”10”10”4”0”0”0”4”0”10”10”4”0”0”0”0”0+m.group(0);Sysout(“value2”+m.group(1));}else{Sysout(“不匹配”);}}所以说你在使用Java安全吗?在这种情况下,你应该在管道符号上拆分。你到底想要什么输出?我只是在Java代码中测试这个正则表达式。实际上我必须在其他地方使用这个正则表达式模式。如果这个正则表达式在Java代码中可以工作,那么只有我可以在我的工作中使用它。所以,我不能使用拆分函数。谢谢回答第二个字段时应为空,而不是使用您的代码。我无法使用拆分函数。我正在下面发布我的代码。只有您需要更改正则表达式。您可以相应地修改它吗?公共类模式{psvm(String args[]){String line=“3985199 | | | | | | | | | | | | | | | | | | | | |”2017-04-09-00.53.55.353280-0400“0”1471-2458“13941J”C,CC,D,ES,JS,Q,XC“A”N“apr417”;String pattern=“regex”pattern r=pattern.compile(pattern);Matcher m=r.Matcher(line);if(m.find()){Sysout(value:+m.group(0));Sysout(value:+Sysout(value))+sys(“值:”+m.group(2));…依此类推}否则{Systout(“不匹配”);}}
    CSVReader reader = new CSVReader(new FileReader("yourfile.txt"), '|');
    List myEntries = reader.readAll();