Java 字符串的正则表达式是什么
我有一些字符串如下:Java 字符串的正则表达式是什么,java,regex,Java,Regex,我有一些字符串如下: String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]"; 如何使用regex like(),(),()分割字符串以获得: tableName=hello 模式名=测试 columns=[column[name=h1,key=true],column[name=h2,key=false]] 列由至少可以
String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]";
如何使用regex like(),(),()分割字符串以获得:
列由至少可以出现一次的列组成。假设
数据[
和最后一个]
或多或少是固定的(例如,数据
是一个变量),我们可以使用replaceAll(“^[^\\\]\[+\[\\\\]$”)
删除这些值(所有不是[
和]
的值都使用[
在开始处后面,在结束处有一个]
),并使用以下方法解析其余部分:
public static List<String> splitWithCommaOutsideBrackets(String input) {
int BracketCount = 0;
int start = 0;
List<String> result = new ArrayList<>();
for(int i=0; i<input.length(); i++) {
switch(input.charAt(i)) {
case ',':
if(BracketCount == 0) {
result.add(input.substring(start, i).trim());// Trims the item!
start = i+1;
}
break;
case '[':
BracketCount++;
break;
case ']':
BracketCount--;
if(BracketCount < 0)
return result; // The BracketCount shows the [ and ] number is unbalanced
break;
}
}
if (BracketCount > 0)
return result; // Missing closing ]
result.add(input.substring(start).trim()); // Trims the item!
return result;
}
公共静态列表拆分,使用逗号外括号(字符串输入){
int BracketCount=0;
int start=0;
列表结果=新建ArrayList();
对于(int i=0;i 0)
返回结果;//缺少结束符]
result.add(input.substring(start.trim());//修剪项目!
返回结果;
}
并将其用作
String input = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]";
List<String> res = splitWithCommaOutsideBrackets(input.replaceAll("^[^\\]\\[]+\\[|\\]$",""));
for (String t: res) {
System.out.println(t); // Printing the results
}
String input=“Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]”;
List res=splitwithCommaOutside括号(input.replaceAll(“^[^\\]\[]+\[\\[\\\]$”,”);
for(字符串t:res){
System.out.println(t);//打印结果
}
请参阅。首先,您的描述应该更清楚。
假设字符串看起来像“Data[*,*,*]”,您可以通过正则表达式获取“Data[]”内的内容。现在有了“*,*,*”,String.split()是个好主意 示例代码:
String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true]]]";
String regex = "^Data\\[(.+)\\]$";
Matcher m = Pattern.compile(regex).matcher(str);
if (m.find()) {
if (m.group(1) != null) {
String content = m.group(1);
String[] split = content.split(",", 3);
String tableName = split[0];
String schemaName = split[1];
String columns = split[2];
System.out.println(tableName);
System.out.println(schemaName);
System.out.println(columns);
}
}
结果:
tableName=hello
schemaName=test
columns=[column[name=h1,key=true],column[name=h2,keys=false]]
让我猜猜-Java?好吧,OP-question-history指向Python,但是
String
指向其他lang。。。。不清楚。在嵌套结构上使用正则表达式不是最好的主意。对,我错过了。。。这场比赛我总是输!:-(我使用的是java,@Rawing所说的应该是正确的。谢谢你的帮助。但我认为Wiktor Stribiżew的答案更通用,它可以适应任意数量的列,并且列可以以任意顺序出现在字符串中。如果另一个字符串有columns=[column[name=h1,key=true]]
作为第一个参数,这种方法将失败。答案非常详细、通用,而且确实很有效。它可以适应各种情况。函数“SplitWithCommaOutside括号”确实表达了我想说的内容。谢谢!