【发布时间】:2021-11-10 09:23:33
【问题描述】:
我有这样的递归字符串,
var1=[[1,2,3], [1,2,3]], var2=true, var3="hello", var4=(var1=[[1,2,3], [1,2,3]], var2=true, var3="hello")
我想用逗号分隔字符串,想要的结果是这样,
- var1=[[1,2,3], [1,2,3]]
- var2=true
- var3="你好"
- var4=(var1=[[1,2,3], [1,2,3]], var2=true, var3="hello")
我试过这个正则表达式 (([a-zA-Z0-9]*)=(.*),?\s?)* 来匹配这样的东西 varx=(), 但完整的字符串是匹配的。
我也尝试通过遍历字符串来做到这一点,但无法分隔像 varx="...." 这样的字符串,因为引号可以包含任何内容,因此无法做到这一点.
public static int fun2(int start_index, String str, int end_index) {
Stack<Character> charStack = new Stack<>();
charStack.add(str.charAt(start_index));
char opp = ' ';
if (str.charAt(start_index) == '(') {
opp = ')';
} else if (str.charAt(start_index) == '[') {
opp = ']';
} else if (str.charAt(start_index) == '[')
while (end_index < str.length() && !charStack.isEmpty()) {
if (str.charAt(end_index) == str.charAt(start_index)) {
charStack.add(str.charAt(start_index));
} else if (str.charAt(end_index) == opp) {
charStack.pop();
}
end_index++;
}
if (charStack.isEmpty()) {
System.out.println("correct");
System.out.println(str.substring(start_index, end_index));
}
return end_index;
// throw error
}
public static void fun(String str) {
int start = 0;
int end = -1;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '=') {
System.out.println("key = " + str.substring(start, end + 1));
start = i + 1;
end = start + 1;
if (str.charAt(start) == '[' || str.charAt(start) == '(' || str.charAt(i) == '"') {
System.out.println("value = ");
end = fun2(start, str, end);
start = end;
i = start;
}
} else if (str.charAt(i) == ',' || str.charAt(i) == ' ') {
start++;
end++;
} else {
end++;
}
}
}
任何人都可以建议任何可以为我执行此操作的正则表达式或代码段。提前致谢。
【问题讨论】:
标签: java regex regex-group