有没有办法转换字符串
"m1, m2, m3"
以下
"m1/build, m2/build, m3/build"
仅使用String.replaceAll(regex, replacement)
方法?
到目前为止,这是我最好的尝试:
System.out.println("m1, m2, m3".replaceAll("([^,]*)", "$1/build"));
>>> m1/build/build, m2/build/build, m3/build/build
如您所见,输出不正确。但是,在Linux的sed
命令中使用相同的正则表达式可以得到正确的输出:
echo 'm1, m2, m3' | sed -e 's%\([^,]*\)%\1/build%g'
>>> m1/build, m2/build, m3/build
答案 0 :(得分:5)
如果你从另一端看到这个问题(完全是字面意思!),你会得到一个表达式来寻找终结符,而不是内容。这个表达式效果更好:
System.out.println("m1, m2, m3".replaceAll("(\\s*(,|$))", "/build$1"));
答案 1 :(得分:4)
([^,]*)
可以匹配空字符串,甚至可以匹配两个空格。试试([^,]+)
或(\w+)
。
另一个小注 - 您可以使用$0
来引用整个匹配的字符串,从而避免捕获的组:
System.out.println("m1, m2, m3".replaceAll("\\w+", "$0/build"));