2012-07-07 32 views
0

我試圖解析這個字符串,Java正則表達式捕獲組包含空間,爲什麼?

"斬釘截鐵 斬釘截鐵 [zhan3 ding1 jie2 tie3] /to chop the nail and slice the iron (idiom)/resolute and decisive/unhesitating/definitely/without any doubt/"; 

有了這個代碼

private static final Pattern TRADITIONAL = Pattern.compile("(.*?) "); 

    private String extractSinglePattern(String row, Pattern pattern) { 
     Matcher matcher = pattern.matcher(row); 
     if (matcher.find()) { 
      return matcher.group(); 
     } 
     return null; 
    } 

但是,由於某種原因,返回的字符串包含在後面加上一個空格

org.junit.ComparisonFailure: expected:<斬釘截鐵[]> but was:<斬釘截鐵[ ]> 

有我的模式有問題嗎? 我也曾嘗試

private static final Pattern TRADITIONAL = Pattern.compile("(.*?)\\s"); 

但無濟於事

我也試圖與在模式的結尾兩個空間相匹配,但它不匹配(只有一個空格)。

回答

2

您使用Matcher.group()其記錄爲:

返回由以前匹配所匹配的輸入子序列。

匹配包含空格。 捕獲組內的匹配不,但你沒有要求。

如果您改變return語句:

return matcher.group(1); 

那麼我相信它會做你想要什麼。

+0

嗯,它的工作。非常感謝! – 2012-07-07 09:56:29

+0

只是一個建議:爲什麼不使用'(。*?)+'來覆蓋多個空格? – 2012-07-07 10:56:16

+0

Marko,我相信格式是固定在一個空間..所以我寧願保持它,除非我發現,否則 – 2012-07-09 11:04:34

0

使用此正則表達式(.+?)(?=\s+)

+0

非捕獲組在這裏是多餘的。它只有一個成員。 – 2012-07-07 10:57:36