我的管道分隔数据如下:
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。
提前致谢。
答案 0 :(得分:1)
\|+
因为,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 ++之类的东西删除每个术语的引号,那么这也是一个很好的起点。
在这里演示:
答案 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();