2015-02-11 55 views
0

我需要字符串示例的最後一個字母字符:ABRACADABRA123456。正則表達式[a-zA-Z](?=\d+)給了我所有情況下的匹配。如何更改(反轉)表達式以便在java方法中使用它:例如:"ABRACADABRA123456".replaceAll(<inverse-regex>,"")如何反轉正則表達式以在java replaceAll方法中使用它?

輸入:ABRACADABRA123456
用途:"ABRACADABRA123456".replaceAll(...)
OUTPUT:A(串的最後一個字母)

解決:System.out.println("ABRACADABRA123456".replaceAll("([\\D]+)([a-zA-Z](?=\\d+))([\\d]+)","$2")));

+3

什麼是你期望的輸出? – 2015-02-11 11:10:57

+0

期望在圓括號中輸出一個字母字符:'ABRACADABR(A)123456' – usmandam 2015-02-11 11:22:38

+0

@usmandam如果原始正則表達式是'某個數字之前的字母',那麼'反向'是什麼? *一些數字後面的字母*一封信*不*後跟數字?一些字母前的數字?我可以繼續...... – Biffen 2015-02-11 11:22:44

回答

0

[a-zA-Z](?=\d+)將不匹配的最後一個字母。

System.out.println("ABRACADABRA123456".replaceAll("([A-Za-z])(?=[^A-Za-z]*$)","($1)")); 

上述正則表達式將捕捉字母表只有當它的後面是任何非字母字符零次或多次,直到最後。所以它只匹配最後一個字母。

輸出:

ABRACADABR(A)123456 
+0

爲什麼一個downvote? – 2015-02-11 11:52:23

+0

預期的輸出是最後一個'A' – usmandam 2015-02-11 12:44:56

+0

看上面的正則表達式。它匹配最後一個A.你可以在模式和匹配類中使用上述正則表達式。 – 2015-02-11 12:45:38