我有一堆看起来像这样的字符串
/files/etc/hosts/2/ipaddr
/files/etc/hosts/2/canonical
/files/etc/hosts/2/alias[1]
/files/etc/hosts/3/ipaddr
/files/etc/hosts/3/canonical
/files/etc/hosts/3/alias[1]
/files/etc/hosts/4/ipaddr
/files/etc/hosts/4/canonical
/files/etc/hosts/4/alias[1]
我想在位于/
和/
之间的任何数字前面添加0。在追加之后,结果看起来应该是这样......
/files/etc/hosts/02/ipaddr
/files/etc/hosts/02/canonical
/files/etc/hosts/02/alias[1]
/files/etc/hosts/03/ipaddr
/files/etc/hosts/03/canonical
/files/etc/hosts/03/alias[1]
/files/etc/hosts/04/ipaddr
/files/etc/hosts/04/canonical
/files/etc/hosts/04/alias[1]
我很确定我需要使用简单的正则表达式进行搜索。我认为/\d*/
应该足够但我不知道如何修改字符串以插入数字0.有人可以给我一些建议吗?
答案 0 :(得分:5)
使用:
newString = string.replaceAll("/(\\d)(?=/)", "/0$1");
\\d
只有一位数。您可以将\\d+
用于一位或多位数字。
$1
表示字符串中与括号中出现的第一个内容匹配的部分(有一些例外),因此(\\d)
。
您需要使用预先(?=...)
而不仅仅是/(\\d)/
,否则
/files/etc/hosts/3/5/canonical
将成为
/files/etc/hosts/03/5/canonical
而不是
/files/etc/hosts/03/05/canonical
(如果您不使用预测,则在匹配3期间将消耗3到5之间的/
,因此它与5)不匹配。
如果上述字符串不是可能的输入,则这不是问题(您只需使用/(\\d)/
)。