gpt4 book ai didi

java - 递归替换为 Java 正则表达式?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:33 24 4
gpt4 key购买 nike

我可以将 ABC(10,5) 替换为 (10)%(5) 使用:

replaceAll("ABC\\(([^,]*)\\,([^,]*)\\)", "($1)%($2)")

但我不知道如何为 ABC(ABC(20,2),5)ABC(ABC(30,2),3+2 )

如果我能够转换为 ((20)%(2))%5 我怎样才能转换回 ABC(ABC(20,2),5)?

谢谢,j

最佳答案

我先回答第一个问题。我无法在单个 replaceAll 中完成任务。我认为这甚至无法实现。但是,如果我使用循环,那么这应该可以为您完成工作:

    String termString = "([0-9+\\-*/()%]*)";
String pattern = "ABC\\(" + termString + "\\," + termString + "\\)";
String [] strings = {"ABC(10,5)", "ABC(ABC(20,2),5)", "ABC(ABC(30,2),3+2)"};
for (String str : strings) {
while (true) {
String replaced = str.replaceAll(pattern, "($1)%($2)");
if (replaced.equals(str)) {
break;
}
str = replaced;
}
System.out.println(str);
}

我假设您正在为数字表达式编写解析器,因此定义了术语 termString = "([0-9+\\-*/()%]*)"。它输出这个:

(10)%(5)
((20)%(2))%(5)
((30)%(2))%(3+2)

编辑 根据 OP 请求,我添加了用于解码字符串的代码。它比前向场景更 hacky:

    String [] encoded = {"(10)%(5)", "((20)%(2))%(5)", "((30)%(2))%(3+2)"};
String decodeTerm = "([0-9+\\-*ABC\\[\\],]*)";
String decodePattern = "\\(" + decodeTerm + "\\)%\\(" + decodeTerm + "\\)";
for (String str : encoded) {
while (true) {
String replaced = str.replaceAll(decodePattern, "ABC[$1,$2]");
if (replaced.equals(str)) {
break;
}
str = replaced;
}
str = str.replaceAll("\\[", "(");
str = str.replaceAll("\\]", ")");
System.out.println(str);
}

输出是:

ABC(10,5)
ABC(ABC(20,2),5)
ABC(ABC(30,2),3+2)

关于java - 递归替换为 Java 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734069/

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