正则表达式匹配“|”
嘿家伙们,我想用Java的useDelimiter
方法对它的Scanner
类做一些简单的解析。基本上每行是由限定的记录“|”,因此,例如:正则表达式匹配“|”
2 | John Doe
3 | Jane Doe
4 | *
的方法作为一个参数,其用于以匹配正则表达式。有人能请我提供与|
匹配的正则表达式(两边用一个空格分隔的垂直条)。
谢谢,我真的很感激它!
我想出了\s\|\s
这在Java中将表示为"\\s\\|\\s"
。我不知道这是否是最好的。我不需要任何硬核,只是有用的东西,而这似乎:)
对不起回答我自己的问题,我猜想输入后,它帮助我思考。
只要小心,'\ s'将是任何空格字符,包括'\ t'!所以你可能想要更具体一些,取决于你的输入设置。 – 2010-03-04 00:55:08
我同意 - 我会用'“\\ |”'作为我的参数使用Delimiter – 2010-03-04 00:57:34
Ohhh好的,谢谢!我不知道它可能是那么容易:) – 2010-03-04 00:59:06
" \| "
会工作,你需要转义引号和|
不要忘了包括*匹配重复字符
\S*\s*\|\s*[\S\t ]*
编辑 - 您可以使用简单,就是太.*\|.*
你的第二个正则表达式,'。* \ |。*',会在返回的字符串上留下空格... – 2010-03-04 09:05:05
......
^[ \| ]?$
这里是一个解析字符串的代码片段(或整个File,Scanner都可以接受),并从每行中提取数字和名称:
String s =
"1 | Mr John Doe\n" +
"2 | Ms Jane Doe\n" +
"3 | *\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 *
很酷! split()具有正则表达式的参数,因此您需要使用\ |代表酒吧,在一个字符串中是“\\ |”。 – jgmao 2013-08-07 04:07:18
的Java必须有某种形式的字符串分割功能。你可以使用它。 – 2010-03-04 00:52:46
是的,这实际上是我最终做的,但我仍然使用正则表达式来分割线字符串:) – 2010-03-04 01:13:20