gpt4 book ai didi

Java 正则表达式 : how to reduce sequence of same character of a unity?

转载 作者:行者123 更新时间:2023-11-30 02:36:49 26 4
gpt4 key购买 nike

我想用长度小一的括号序列替换字符串中的每个括号序列。这是一个可能的输入:

String toBeParsed = "src:expr[src:call[src:name[src:name='m']]]]" +        
"[src:call[src:name[src:operator='.']]]]" +
"[src:call[src:name[src:name='getDisplayFormat']]]]" +
"[src:call[src:argument_list='()']]][src:operator='instanceof']]" +
"[src:name='MathFormat']]";

这是期望的输出:

String result = "src:expr[src:call[src:name[src:name='m']]]" +        
"[src:call[src:name[src:operator='.']]]" +
"[src:call[src:name[src:name='getDisplayFormat']]]" +
"[src:call[src:argument_list='()']][src:operator='instanceof']" +
"[src:name='MathFormat']";

我尝试使用 Java 类执行此操作,但它在两个循环后停止删除括号:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SequenceCutter{
public static void main(String[] args){
String toBeParsed = "src:expr[src:call[src:name[src:name='m']]]]" +
"[src:call[src:name[src:operator='.']]]]" +
"[src:call[src:name[src:name='getDisplayFormat']]]]" +
"[src:call[src:argument_list='()']]][src:operator='instanceof']]" +
"[src:name='MathFormat']]";
Matcher bracketsMatch;
int subIndex = 0;
String oldString;
do {
bracketsMatch = Pattern.compile("\\]+").
matcher(toBeParsed.substring(subIndex));
if (!bracketsMatch.find())
break;
subIndex = bracketsMatch.end();
String match = bracketsMatch.group();
oldString = toBeParsed;
toBeParsed = toBeParsed.substring(0, subIndex)
.replace(match, match.substring(1)) + toBeParsed.substring(subIndex);
} while (bracketsMatch.find() && !oldString.equals(toBeParsed));
System.out.println("Result: " + toBeParsed);
}
}

我想我正在以一种非常复杂的方式做这件事,但我无法找到其他解决方案。感谢任何人都会尽力帮助我。

最佳答案

如果您需要将任何 2+ ] 符号序列替换为相同序列减去 1 ],您可以使用

String toBeParsed = "src:expr[src:call[src:name[src:name='m']]]]" +        
"[src:call[src:name[src:operator='.']]]]" +
"[src:call[src:name[src:name='getDisplayFormat']]]]" +
"[src:call[src:argument_list='()']]][src:operator='instanceof']]" +
"[src:name='MathFormat']]";
System.out.println(toBeParsed.replaceAll("(]+)]", "$1"));

请参阅Java demo .

"(]+)]" 模式将匹配并捕获两个或多个 ] 符号,并将除最后一个之外的所有符号放入捕获组中。然后,除了最后一个之外的所有内容都将通过 $1 反向引用放回到结果中。

关于Java 正则表达式 : how to reduce sequence of same character of a unity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813296/

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