我有一些字符串如下:什麼是字符串的正則表達式
String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]";
如何劃分使用類似(正則表達式))的字符串,(,(),以獲得:
- 表名=你好
- SCHEMANAME =測試
- 列= [柱[名= H1,鍵=真],柱[名= H 2,=鍵假]]
這些列由至少出現一次的列組成。
我有一些字符串如下:什麼是字符串的正則表達式
String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]";
如何劃分使用類似(正則表達式))的字符串,(,(),以獲得:
這些列由至少出現一次的列組成。
假設Data[
和最後]
都或多或少固定的(比方說,Data
是變量)中,我們可以使用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;
}
並使用它作爲
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
}
請參閱Java demo。
答案是如此詳細,通用和真正的效果,它可以適應各種不同的情況。 ! –
首先,你的描述應該更清楚。
假設字符串看起來像「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]]
感謝您的幫助,但我認爲WiktorStribiżew的答案更具有普遍性,可以適應隨機數量的列,並且列可以以字符串中的任何順序出現 –
一旦另一個字符串類似'columns = [column [name = h1,key = true]]第一個論點,這種方法會失敗。 –
讓我猜猜 - Java的? –
好吧,OP的問題歷史指向Python,但'String'指向其他langs ....不清楚。 –
在嵌套結構上使用正則表達式不是最好的主意。 –