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公共卫生,而无需双引号
提前谢谢
\\\+
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();