Java的正则表达式替换 - 如何使有效的

问题描述:

我有设备一个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 

我想知道是否有一个更好的方法来做到这一点?

可以使用此简单的正则表达式:

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

另一个变化:

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

无论如何,即使我看起来更容易阅读,anubhava的解决方案运行速度更快,因此效率更高(52步vs 60步regex101)。 – zolo