2009-12-29 70 views
1

我需要刪除某些項目列表末尾的某些字符。這些人物都是一樣的(C,CD,PDF,CPDF,M)以及與此正則表達式我能夠擺脫他們:Java正則表達式

str.replaceAll("(C|CD|PDF|CPDF|M)$", ""); 

但是,我不能逆這種表達:我希望能夠隔離(通過刪除其餘的字符串,例如)任何這些代碼,如果他們在字符串的末尾。我嘗試這樣做:

str.replaceAll("!(C|CD|PDF|CPDF|M)$", "");

我可能通過使用一些字符串函數得到,但我敢肯定,這可能僅使用正則表達式。

+3

你是什麼意思的「反轉這個表達式」呢?你究竟在努力實現什麼? – AlBlue 2009-12-29 16:16:34

+0

這聽起來像他想要刪除所有不在該集合中的後綴。但是,這沒有意義,所以我不確定。 – SLaks 2009-12-29 16:18:56

+0

一個瘋狂的猜測,我會說他想知道他實際上刪除了什麼。 – 2009-12-29 16:20:42

回答

5

您已經使用圓括號來捕獲匹配組,現在只需引用該組。

Matcher m = Pattern.compile("(C|CD|PDF|CPDF|M)$").matcher("165N1JCD"); 
    while (m.find()) { 
     System.out.println(m.group(1)); // prints out "CD" 
    } 
2

同約什身高,除了正則表達式,允許獲得兩個部分

Matcher m = Pattern.compile("(.*)(C|CD|PDF|CPDF|M)$").matcher("165N1JCD"); 
    while (m.find()) { 
     System.out.println(m.group(1)); // prints out "165N1J" 
     System.out.println(m.group(2)); // prints out "CD" 
    } 
0

可以使用Matcher類抓住特定羣體(刪除後綴)並執行的replaceAll操作。另一種選擇是讓你的表情有兩個組,一個是你擁有的,另一個是在其他任何一個之前。

0

如果你不想使用匹配器類,你可以堅持的replaceAll:

str.replaceAll(".*(C|CD|PDF|CPDF|M)$", "$1");