使用正则表达式检测特殊字符串并仅替换其中的一部分

时间:2014-06-15 13:10:03

标签: java regex

我对这个问题有点困难,所以我无法找到答案。此外,可能没有简单的方法可以做我正在尝试做的事情,这就是......

我正在尝试检测一个特殊序列,在我的情况下是;后跟一个数字,并将;替换为&#后跟相同的数字。例如:

;123;;234; ;345; --> {ê ř

正则表达式可以轻松地找到我的序列,但是如何保留替换中使用的数字?

当然,每个数字使用单独的replace都可行,但我正在寻找比这更优雅的东西:

str = str.replace(";1","&#1");
str = str.replace(";2","&#2");
...
str = str.replace(";9","&#9");

谢谢!

3 个答案:

答案 0 :(得分:2)

也许这样,未经测试。检查Javadoc:

str = str.replaceAll( ";(\\d+)", "&#$1;" );

答案 1 :(得分:2)

换句话说,只有当;后面有数字时,您才想将&#替换为str = str.replaceAll(";(?=\\d)","&#"); 。在这种情况下,您可以使用look-ahead机制,如

;(?=\\d)

;表示我之前描述的内容:仅在\\d之后接受\\d,但在匹配中不包含此;只有{{1}部分将被替换。

答案 2 :(得分:0)

这是你需要的正则表达式

String s =";123;;234; ;345;";  
Pattern p = Pattern.compile(";(\\d)");
Matcher m = p.matcher(s);
while (m.find()){
  s= s.replace(";"+m.group(1), "&#"+m.group(1));    
}
System.out.println(s);