如何在java中使用regexp替换String时跳过特定的单词

a.p*_*nov 2 java regex string

考虑字符串

String s = "H_ello pe_rfec_t wor_ld"
Run Code Online (Sandbox Code Playgroud)

我想替换所有'_'符号...无论如何,让我们说'1',除了那些放在'pe_rfec_t'里面的符号.我甚至没有找到任何解决方案,只是跳过'pe_rfec_t'这个词:

s = s.replaceAll("(?<=pe_rfec_t).*|.*(?=pe_rfec_t)", "1");
Run Code Online (Sandbox Code Playgroud)

看起来很好看,但结果是:

11pe_rfec_t1 //instead of 1111111pe_rfec_t1111111
Run Code Online (Sandbox Code Playgroud)

理想情况下,我需要以下结果:

Hello pe_rfec_t world
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

anu*_*ava 6

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

String str = "H_ello pe_rfec_t wor_ld";

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

RegEx演示

在这里交替我们首先匹配pe_rfec_t并在组#1中捕获它.在重新定位时,我们将$1(反向引用组#1)放回去.