gpt4 book ai didi

java - 仅在由某些字符分隔的文本的某些部分替换子字符串

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

我需要替换所有出现的子字符串,前提是它前面有“]”,后面有“[”(前面和后面但不一定紧挨着子字符串)。示例:

这将是我需要进行替换的字符串:

[style and tags info] valid text info [more style info] more info here[styles]

如果要替换的表达式是:info -> change(它可能不止一个单词)

结果应该是:

[style and tags info] valid text change [more style info] more change here [styles]

我的想法是使用正则表达式来隔离我必须更改的单词,然后通过调用 replaceAll 进行替换。

但是我已经尝试了几个正则表达式来隔离搜索表达式,但都没有成功。主要是因为我需要像

这样的东西
(?<=.*)

这是一个在我要查找的词之前有任意数量字符的回溯。 Java 正则表达式(也不支持我所知道的任何其他正则表达式实现)均不支持此功能。

我找到了这个用 matlab 编写的解决方案,但在 Java 中似乎更难复制:

Matlab regex - replace substring ONLY within angled brackets

有没有更简单的方法?一些我没有考虑过的正则表达式?

最佳答案

我认为这里最简单的方法是将字符串拆分为(括号外的部分)和(括号内的部分),然后仅将替换应用于(括号内的部分)。

例如,您可以使用拆分来做到这一点(这假设您的 [] 是均匀平衡的,您没有打开两个 [[ 等):

String[] parts = str.split("[\[\]]");
StringBuilder sb = new StringBuilder(str.length());
for (int i = 0; i < parts.length; i++) {
if (i % 2 == 0) {
// This bit was outside [].
sb.append(parts[i]);
} else {
// This bit was inside [], so apply the replacement
// (and re-append the delimiters).
sb.append("[");
sb.append(parts[i].replace("info", "change"));
sb.append("]");
}
}
String newStr = sb.toString();

关于java - 仅在由某些字符分隔的文本的某些部分替换子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43224316/

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