正则表达式匹配“|”

时间:2010-03-04 00:49:50

标签: java regex parsing java.util.scanner delimiter

嘿伙计们,我正在尝试在它的Scanner类上使用Java的useDelimiter方法来进行一些简单的解析。基本上每一行都是由“|”分隔的记录,例如:

2 | John Doe
3 | Jane Doe
4 | Jackie Chan

该方法将正则表达式作为参数,以便与之匹配。有人可以请我提供与|匹配的正则表达式(两边用一个空格分隔的竖线)。

谢谢,我真的很感激!

5 个答案:

答案 0 :(得分:14)

我想出了\s\|\s,它在Java中表示为"\\s\\|\\s"。我不知道这是不是最好的。我不需要任何硬核,只需要有效的东西,这似乎是:)

很抱歉回答我自己的问题,我想在输入后它帮助我思考。

答案 1 :(得分:4)

这是一个代码片段,用于解析字符串(或整个文件,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

答案 2 :(得分:0)

" \| " 

会工作,你需要逃避引号和|

答案 3 :(得分:0)

别忘了包含*来匹配重复的字符

\S*\s*\|\s*[\S\t ]*

已编辑 - 你也可以使用.*\|.*

答案 4 :(得分:0)

...

^[ \| ]?$