2011-03-20 87 views
0

,如果我有一個文本Java的正則表達式處理

R 26唧唧歪歪喇嘛R 25喇嘛喇嘛[R 25/30唧唧歪歪小號30/50/30喇嘛喇嘛

,我有一個正則表達式

[RS] (\\d+|\\d+/\\d+|\\d+/\\d+/\\d+) 

這將匹配大膽的數據... 現在,我想要一個代碼返回給我粗體表達式+下面的數據。

例如,我想下面對:

R 26 : bla bla bla bla 
R 25 : bla bla 
R 25/30 : bla bla bla 
S 30/50/30 : bla bla 

可能是這樣的圖像更加清晰:

+1

「我希望有一個代碼」 - 是一個「PLZ sendz的codez」變種? – 2011-03-20 01:06:11

+0

什麼是「發送編碼」? – 2011-03-20 01:10:38

+0

請參閱[這個元常見問題答案](http://meta.stackexchange.com/questions/19478/the-many-memes-of-meta/19780#19780) – Cameron 2011-03-20 04:12:34

回答

2

在這裏你去!

Pattern pattern = Pattern.compile("([RS] (\\d+|\\d+/\\d+|\\d+/\\d+/\\d+)) ([^RS]*)"); 

Matcher matcher = pattern.matcher("R 26 bla bla bla bla R 25 bla bla R 25/30 bla bla bla S 30/50/30 bla bla"); 

while(matcher.find()) { 
    System.out.println(matcher.group(1) + " " + matcher.group(3)); 
} 
+0

這實現了Java代碼,但正則表達式是相同的原來不起作用。 – ridgerunner 2011-03-20 16:17:15

+0

@ridgerunner - 我只驗證他們的工作,只粘貼代碼。原始RegEx有一個逃避問題。這一個是不同的。 – adarshr 2011-03-20 17:43:13

+0

我指的是替代品的順序。看到我的回答... – ridgerunner 2011-03-20 22:04:48

0

替代方案的順序很重要。用你原來的正則表達式,第二個和第三個選擇將永遠不會匹配。扭轉他們的訂單可修復像這樣的問題:

Pattern regex = Pattern.compile("([RS] (\\d+/\\d+/\\d+|\\d+/\\d+|\\d+)) ([^RS]*)");