在java中使用regexp替换字符串时如何跳过特定单词

在java中使用regexp替换字符串时如何跳过特定单词,java,regex,string,Java,Regex,String,以字符串为例 String s = "H_ello pe_rfec_t wor_ld" 我想替换。。。不管怎样,让我们说“1”,除了那些放在“pe_rfec_t”中的。 我找不到任何解决办法,甚至跳过“pe_rfec_t”这个词: s = s.replaceAll("(?<=pe_rfec_t).*|.*(?=pe_rfec_t)", "1"); 理想情况下,我需要以下结果: Hello pe_rfec_t world 有人能帮我吗?您可以使用交替和捕获组: String str =

以字符串为例

String s = "H_ello pe_rfec_t wor_ld"
我想替换。。。不管怎样,让我们说“1”,除了那些放在“pe_rfec_t”中的。 我找不到任何解决办法,甚至跳过“pe_rfec_t”这个词:

s = s.replaceAll("(?<=pe_rfec_t).*|.*(?=pe_rfec_t)", "1");
理想情况下,我需要以下结果:

Hello pe_rfec_t world

有人能帮我吗?

您可以使用交替和捕获组:

String str = "H_ello pe_rfec_t wor_ld";

String repl = str.replaceAll("(pe_rfec_t)|_", "$1");
//=> Hello pe_rfec_t world


在这里,我们交替地首先匹配
pe\u rfec\u t
,并将其捕获到第1组中。在repalcement中,我们将
$1
(返回对组1的引用)放回原处。

可能相关:将字符串拆分为单词,然后对所有相关单词应用一个简单的正则表达式(跳过“完美”)。仅供参考:如果有人想用
1
替换
,此解决方案将不起作用。非常感谢!这是我这个问题的一个明智而优雅的决定
String str = "H_ello pe_rfec_t wor_ld";

String repl = str.replaceAll("(pe_rfec_t)|_", "$1");
//=> Hello pe_rfec_t world