我试图useDelimiter
在它的Scanner
类上使用 Java 的方法来做一些简单的解析。基本上每一行都是由“|”分隔的记录,例如:
2 | John Doe
3 | Jane Doe
4 | Jackie Chan
该方法将要匹配的正则表达式作为参数。有人可以为我提供匹配的正则表达式|
(两边用一个空格分隔的竖线)。
谢谢,我真的很感激!
我试图useDelimiter
在它的Scanner
类上使用 Java 的方法来做一些简单的解析。基本上每一行都是由“|”分隔的记录,例如:
2 | John Doe
3 | Jane Doe
4 | Jackie Chan
该方法将要匹配的正则表达式作为参数。有人可以为我提供匹配的正则表达式|
(两边用一个空格分隔的竖线)。
谢谢,我真的很感激!
我想出了\s\|\s
在 Java 中可以表示为"\\s\\|\\s"
. 我不知道这是否是最好的。我不需要任何硬核,只需要有效的东西,这似乎:)
很抱歉回答我自己的问题,我想在输入它之后它帮助我思考。
这是一个解析字符串(或整个文件,Scanner 接受两者)的代码片段,并从每一行中提取数字和名称:
String s =
"1 | Mr John Doe\n" +
"2 | Ms Jane Doe\n" +
"3 | Jackie Chan\n";
Pattern pattern = Pattern.compile("(\\d+) \\| ((\\w|\\s)+)");
Scanner scan = new Scanner(s);
while (scan.findInLine(pattern) != null) {
MatchResult match = scan.match();
// Do whatever appropriate with the results
System.out.printf("N° %d is %s %n", Integer.valueOf(match.group(1)), match.group(2));
if (scan.hasNextLine()) {
scan.nextLine();
}
}
此代码段产生以下结果:
N° 1 is Mr John Doe
N° 2 is Ms Jane Doe
N° 3 is Jackie Chan
" \| "
会工作,你需要转义引号和 |
不要忘记包含 * 以匹配重复字符
\S*\s*\|\s*[\S\t ]*
已编辑-您也可以简单地使用它.*\|.*
……
^[ \| ]?$