正则表达式匹配“|”

正则表达式匹配“|”

问题描述:

嘿家伙们,我想用Java的useDelimiter方法对它的Scanner类做一些简单的解析。基本上每行是由限定的记录“|”,因此,例如:正则表达式匹配“|”

2 | John Doe 
3 | Jane Doe 
4 | * 

的方法作为一个参数,其用于以匹配正则表达式。有人能请我提供与|匹配的正则表达式(两边用一个空格分隔的垂直条)。

谢谢,我真的很感激它!

+1

的Java必须有某种形式的字符串分割功能。你可以使用它。 – 2010-03-04 00:52:46

+0

是的,这实际上是我最终做的,但我仍然使用正则表达式来分割线字符串:) – 2010-03-04 01:13:20

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

对不起回答我自己的问题,我猜想输入后,它帮助我思考。

+2

只要小心,'\ s'将是任何空格字符,包括'\ t'!所以你可能想要更具体一些,取决于你的输入设置。 – 2010-03-04 00:55:08

+4

我同意 - 我会用'“\\ |”'作为我的参数使用Delimiter – 2010-03-04 00:57:34

+0

Ohhh好的,谢谢!我不知道它可能是那么容易:) – 2010-03-04 00:59:06

" \| " 

会工作,你需要转义引号和|

不要忘了包括*匹配重复字符

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

编辑 - 您可以使用简单,就是太.*\|.*

+1

你的第二个正则表达式,'。* \ |。*',会在返回的字符串上留下空格... – 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 * 
+0

很酷! split()具有正则表达式的参数,因此您需要使用\ |代表酒吧,在一个字符串中是“\\ |”。 – jgmao 2013-08-07 04:07:18