您可以使用
String s = "{en_GB==pm!name}";
System.out.println(s.replaceAll("\\{\\w+=+([^}]+)}", "$1"));
見IDEONE demo
正則表達式匹配
\\{
- 字面{
\\w+
- 1以上alphanume RICS或下劃線
=+
- 1個以上等號
([^}]+)
- 比賽和捕捉到第1組比}
}
其他一個或多個字符 - 一個閉括號
當子匹配後,所有匹配的文本將被替換爲僅記錄到組1中的文本$1
。
,因爲你必須在正則表達式匹配是1個字符要麼是{
或非字字符(\W
)和文字}
因爲你所包圍的表達成sqaure括號,由此形成character class您的解決方案是行不通的。現在
,因爲這正則表達式是相當通用的,你可能會進一步縮小其匹配能力是這樣的:
System.out.println(s.replaceAll("(?i)\\{en_[a-z]+=+([^}]+)}", "$1"));
見another demo
這en_[a-z]+
將被要求, - 爲(?i)
使模式不區分大小寫 - 將匹配en_US
或EN_US
。
如果你知道有en_
後僅2個字母,使用limiting quantifier{2}
:
System.out.println(s.replaceAll("(?i)\\{en_[a-z]{2}=+([^}]+)}", "$1"));
能否請您發佈您的代碼?否則,不可能檢查你有什麼問題。 –
如果'{en_GB ==我的名字}是你的輸入,你的輸出是什麼? – Kerwin
我的輸出是「我的名字」 – MaheshVarma