String tempprop="(kfsdk)#";
tempprop = tempprop.replaceAll("[^\\s]\\)\\#", "\"?if_exists}");
System.out.println("1"+tempprop+"2");


我希望输出为


1(kfsdk“?if_exists} 2


但是这个正则表达式的输出是


1(kfsd“?if_exists} 2


最后k个被修整了,我不知道为什么。

如果tempprop为()#,则输出应仅为1()#2,且不带“?if_exists
如果没有空格,则此正则表达式添加"?if_exists,否则按原样返回字符串

最佳答案

您可以使用负向后看而不是[^\\s],因为这会在最终输出中产生一些影响。也就是说,环顾四周的宽度为零。

String tempprop="(kfsdk)#";
tempprop = tempprop.replaceAll("(?<!\\s)\\)#", "\"?if_exists}");
System.out.println("1"+tempprop+"2");


输出:

1(kfsdk"?if_exists}2


说明:


(?<!\s)负向后方断言前面提到的字符不是空格字符。
\)#与文字)#符号匹配。

10-08 18:57