我对这个问题有点困难,所以我无法找到答案。此外,可能没有简单的方法可以做我正在尝试做的事情,这就是......
我正在尝试检测一个特殊序列,在我的情况下是;
后跟一个数字,并将;
替换为&#
后跟相同的数字。例如:
;123;;234; ;345; --> {ê ř
正则表达式可以轻松地找到我的序列,但是如何保留替换中使用的数字?
当然,每个数字使用单独的replace
都可行,但我正在寻找比这更优雅的东西:
str = str.replace(";1","");
str = str.replace(";2","");
...
str = str.replace(";9","	");
谢谢!
答案 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);