gpt4 book ai didi

java - 替换正则表达式出现的地方

转载 作者:行者123 更新时间:2023-12-01 11:56:30 24 4
gpt4 key购买 nike

我有一个输入字符串:

"hello [you], this is [me]"

我有一个将字符串映射到字符串的函数(为了简单起见,进行了硬编码):

public String map(final String input) {
if ("you".equals(input)) {
return "SO";
} else if ("me".equals(input)) {
return "Kate";
}
...
}

用各自的映射(通过调用 map 函数给出)替换每个 [(.*)?] 出现的最便捷方法是什么?

如果我是正确的,你不能在这里使用String.replaceAll(),因为我们事先不知道替换。

最佳答案

首先,你的表达是贪婪的。匹配方括号中的标记的正确表达式是 \[([^\]]*)\] (对于 Java,反斜杠需要加倍),因为它可以避免超过右方括号< sup>*。我添加了一个捕获组来访问方括号内的内容,如group(1)

这里有一种方法可以满足您的需要:

Pattern p = Pattern.compile("\\[([^\\]]*)\\]");
Matcher m = p.matcher(input);
StringBuffer bufStr = new StringBuffer();
boolean flag = false;
while ((flag = m.find())) {
String toReplace = m.group(1);
m.appendReplacement(bufStr, map(toReplace));
}
m.appendTail(bufStr);
String result = bufStr.toString();

Demo.

* 您也可以使用[.*?],但这种不情愿的表达可能会导致回溯。

关于java - 替换正则表达式出现的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411114/

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