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
,否则它将返回字符串
答案 0 :(得分:1)
您可以使用负向lookbehind而不是[^\\s]
,因为它会在最终输出中产生一些影响。也就是说,lookarounds的零宽度匹配。
String tempprop="(kfsdk)#";
tempprop = tempprop.replaceAll("(?<!\\s)\\)#", "\"?if_exists}");
System.out.println("1"+tempprop+"2");
输出:
1(kfsdk"?if_exists}2
<强>解释强>
(?<!\s)
负面观察,断言前面的内容不是空格字符。\)#
匹配文字)#
符号。答案 1 :(得分:0)
要从捕获中排除[^\s]
,请使用正则表达式(?<![^\s])\)\#
。另一种选择是使用(?<=\w)\)\#
强制执行信件,或者甚至使用
out = str.replaceAll("(\\(\\w+)\\)\\#", "$1\"?if_exists}");
有关环视(后瞻和前瞻)的更多信息,请参阅here。