2010-03-04 305 views
6

嘿傢伙們,我想用Java的useDelimiter方法對它的Scanner類做一些簡單的解析。基本上每行是由限定的記錄「|」,因此,例如:正則表達式匹配「|」

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

的方法作爲一個參數,其用於以匹配正則表達式。有人能請我提供與|匹配的正則表達式(兩邊用一個空格分隔的垂直條)。

謝謝,我真的很感激它!

+1

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

+0

是的,這實際上是我最終做的,但我仍然使用正則表達式來分割線字符串:) – 2010-03-04 01:13:20

回答

11

我想出了\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

0
" \| " 

會工作,你需要轉義引號和|

0

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

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

編輯 - 您可以使用簡單,就是太.*\|.*

+1

你的第二個正則表達式,'。* \ |。*',會在返回的字符串上留下空格... – 2010-03-04 09:05:05

3

這裏是一個解析字符串的代碼片段(或整個File,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 
+0

很酷! split()具有正則表達式的參數,因此您需要使用\ |代表酒吧,在一個字符串中是「\\ |」。 – jgmao 2013-08-07 04:07:18