2015-11-06 48 views
1

我有設備一個Java正則表達式如下替代Java的正則表達式替換 - 如何使有效的

Pre-substitution | Post-substitution 
============================= 
GOSP_vhqjvfec  | GOSP 
INWMDN_10qkva  | INWMDN 
OS_INT_ihdqivmf0 | OS_INT 
RSO15_1_%I_0gkuns | RSO15_1 
AUDIT124_%I_qkbfn1 | AUDIT124 
============================== 

執行我用這個正則表達式

regular exp -> (.*?)_%.*|(.*)_.* 
substitution -> $1$2 

我想知道是否有一個更好的方法來做到這一點?

回答

3

可以使用此簡單的正則表達式:

str = str.replaceFirst("_(%\\S*|[^_\\s]+)\\b", ""); 

即匹配下劃線接着用2個交替:

  • %和0個或更多的非空間字符
  • 1或更大的非-underscore和非空格字符

這一切應該跟着一個字邊界。

RegEx Demo

+1

漂亮整潔的方法,真好! – Doro

+1

@anubhava,感謝您的快速回復,我會在星期一進行測試 – Marcos

+0

@anubhava,我正面臨着上述問題(我的不好,我忘記提及我的問題的條件)..如果有這樣的價值作爲OSR_PREP或GOM_GSO_12,它應該保持不變,不應該有任何替代...這是我的問題的擴展 – Marcos

1

另一個變化:

_%I.*$|_[^_]+$ 
+0

無論如何,即使我看起來更容易閱讀,anubhava的解決方案運行速度更快,因此效率更高(52步vs 60步regex101)。 – zolo