使用正则表达式替换字符

时间:2014-08-18 10:45:55

标签: java regex

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,否则它将返回字符串

2 个答案:

答案 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