gpt4 book ai didi

java - 正则表达式去除所有方括号,除了特定前缀之后的方括号

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:27 26 4
gpt4 key购买 nike

所以,我有一个字符串。大多数时候,如果字符串中有方括号,就会发生不好的事情。然而,在少数情况下,有必要保留括号。这些需要保留的括号由某个前缀标识。例如,如果字符串是:

apple][s [pears] prefix:[oranges] lemons ]persimmons[ pea[ches ap]ricots [][[]]][]

我想把它变成:

apples pears prefix:[oranges] lemons persimmons peaches apricots

我想出了一个 Rube Goldberg 的解决方案,看起来像这样:

public class Debracketizer
{
public static void main( String[] args )
{
String orig = "apples [pears] prefix:[oranges] lemons ]persimmons[ pea[ches ap]ricots";
String result = debracketize(orig);
System.out.println(result);
}

private static void debracketize( String orig )
{
String result1 = replaceAll(orig,
Pattern.compile("\\["),
"",
".*prefix:$");

String result2 = replaceAll(result1,
Pattern.compile("\\]"),
"",
".*prefix:\\[[^\\]]+$");

System.out.println(result2);
}

private static String replaceAll( String orig, Pattern pattern,
String replacement, String skipPattern )
{
String quotedReplacement = Matcher.quoteReplacement(replacement);
Matcher matcher = pattern.matcher(orig);
StringBuffer sb = new StringBuffer();
while( matcher.find() )
{
String resultSoFar = orig.substring(0, matcher.start());
if (resultSoFar.matches(skipPattern)) {
matcher.appendReplacement(sb, matcher.group());
} else {
matcher.appendReplacement(sb, quotedReplacement);
}
}
matcher.appendTail(sb);
return sb.toString();
}
}

我确信一定有更好的方法来做到这一点——最好是使用一个简单的正则表达式和一个简单的 String.replaceAll()。但我一直想不出来。

(我之前问过一个 partial version of this question,但我看不出如何使答案适应整个案例。这将教会我提出部分问题。)

最佳答案

这一个类轮:

String resultString = subjectString.replaceAll("(?<!prefix:(?:\\[\\w{0,2000000})?)[\\[\\]]", "");

当应用于:apple][s [pears] prefix:[oranges] lemons ]persimmons[ pea[ches ap]ricots [][[]]][]

会给你你想要的结果:

apples pears prefix:[oranges] lemons persimmons peaches apricots 

您唯一的限制是 prefix:[] 之间的单词可以包含的最大字符数。在这种情况下,限制是 2000000。限制来自 java,因为它不支持负后视中的无限重复。

关于java - 正则表达式去除所有方括号,除了特定前缀之后的方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681347/

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