gpt4 book ai didi

java - 正则表达式 - 添加点前缀,不包括已经有点的单词

转载 作者:行者123 更新时间:2023-11-29 08:27:08 25 4
gpt4 key购买 nike

假设我有以下输入字符串:

range (bar | thumb_1 | thumb_2 | fill)
range(bar|thumb_1|thumb_2|fill)
.root.range.bar

然后我想要以下输出:

.range (.bar | .thumb_1 | .thumb_2 | .fill)
.range(.bar|.thumb_1|.thumb_2|.fill)
.root.range.bar

到目前为止我有这个:

void setup() {
test("range (bar | thumb_1 | thumb_2 | fill)");
test("range(bar|thumb_1|thumb_2|fill)");
test(".root.range.bar");
}

void test(String in) {
String r = in.replaceAll("(\\w+)", "\\.$1"); // add . prefix to every word
println(r);
}

问题是,如果单词已经有一个点前缀,它将添加另一个。我一直在用 [^\\.] 尝试各种各样的事情。但是要么它对最后一个输入字符串不起作用,要么它开始在第一个和第二个输入字符串上吃错字符。

如何正确忽略前面已经有一个点的情况?

最佳答案

你可以使用

.replaceAll("(?<!\\.)\\b\\w+", ".$0")

参见 regex demo .

详情

  • (?<!\\.) - 如果存在 . 则匹配失败的负面回顾紧靠当前位置的左侧
  • \\b - 单词边界
  • \\w+ - 1 个或多个单词字符。

替换是一个点和整个匹配值 ( $0 )。

查看 online Java demo :

String s = "range (bar | thumb_1 | thumb_2 | fill)\nrange(bar|thumb_1|thumb_2|fill)\n.root.range.bar";
System.out.println(s.replaceAll("(?<!\\.)\\b\\w+", ".$0"));
// => .range (.bar | .thumb_1 | .thumb_2 | .fill)
// .range(.bar|.thumb_1|.thumb_2|.fill)
// .root.range.bar

关于java - 正则表达式 - 添加点前缀,不包括已经有点的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com