用于替换的Java正则表达式-如何提高效率
我有一个Java正则表达式来执行下面的替换用于替换的Java正则表达式-如何提高效率,java,regex,Java,Regex,我有一个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 ==================
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", "");
i、 e.匹配一个下划线,后跟2个替换项:
和0个或更多非空格字符%
- 1个或多个非下划线和非空格字符
您可以使用以下更简单的正则表达式:
str = str.replaceFirst("_(%\\S*|[^_\\s]+)\\b", "");
i、 e.匹配一个下划线,后跟2个替换项:
和0个或更多非空格字符%
- 1个或多个非下划线和非空格字符
_%I.*$|_[^_]+$
另一种变体:
_%I.*$|_[^_]+$
非常整洁的方法,很好@阿努巴瓦,谢谢你的快速回复,我会测试一下Monday@anubhava,我正面临上述问题(我的错,我忘了在问题中提及情况)。。如果有一个值,如OSR_PREP或GOM_GSO_12,它应该保持不变,并且不应该有任何替换…这是我的question@anubhava,对于上述条件,如果最多只有9个字符,且所有字符均为大写,这些值不应该有替代项。好的,您应该编辑您的问题,并添加这些示例以清楚说明。我将尝试在这个基础上修改我的正则表达式。非常简洁的方法,很好@阿努巴瓦,谢谢你的快速回复,我会测试一下Monday@anubhava,我正面临上述问题(我的错,我忘了在问题中提及情况)。。如果有一个值,如OSR_PREP或GOM_GSO_12,它应该保持不变,并且不应该有任何替换…这是我的question@anubhava,对于上述条件,如果最多只有9个字符,且所有字符均为大写,这些值不应该有替代项。好的,您应该编辑您的问题,并添加这些示例以清楚说明。我将尝试基于此修改我的正则表达式。无论如何,即使我的正则表达式看起来更容易阅读,anubhava的解决方案也运行得更快,因此效率更高(regex101上52个步骤vs 60个步骤)。无论如何,即使我的正则表达式看起来更容易阅读,anubhava的解决方案运行得更快,因此效率更高(regex101上52个步骤vs 60个步骤)。