我有一个这样格式化的字符串
[dgdds,dfse][fsefsf,sefs][fsfs,fsef]
我将如何使用 Regex 快速解析它以返回一个 ArrayList,其中每个值都包含一个“条目”?
ArrayList <String>:
0(String): [dgdds,dfse]
1(String): [fsefsf,sefs]
2(String): [fsfs,fsef]
真的坚持这一点,任何帮助都会很棒。
怎么样
String myData = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
List<String> list = new ArrayList<>(Arrays.asList(myData
.split("(?<=\\])")));
for (String s : list)
System.out.println(s);
输出:
[dgdds,dfse]
[fsefsf,sefs]
[fsfs,fsef]
此正则表达式将使用后视机制在]
.
你应该试试这个正则表达式:
Pattern pattern = Pattern.compile("\\[\\w*,\\w*\\]");
旧的,简单的,很棒的方式:)
String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
String[] token = s.split("]");
for (String string : token) {
System.out.println(string + "]");
}
您可能需要分两次完成:
(1)如果它只是一个一维数组(问题中不清楚),则用括号拆分:
String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
String[] sArray = s.split("\\[|\\]\\[|\\]");
(2)如果你也想分开,用逗号分开,说“dgdds,dfse”
sArray[i].split(",");
您可以使用简单的正则表达式,这意味着:\[.*?\]
匹配以.[
?
.*?
]
这有效,您可以在Ideone上对其进行测试:
List<String> result = new ArrayList<String>();
String input = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
Pattern pattern = Pattern.compile("\\[.*?\\]");
Matcher matcher = pattern.matcher(input);
while (matcher.find())
{
result.add(matcher.group());
}
System.out.println(result);
输出:
[[dgdds,dfse], [fsefsf,sefs], [fsfs,fsef]]
我们可以split(regex)
通过转义 "]"
: 直接使用函数"\\]"
,然后将其用作regex
模式匹配:
String str = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
String bal[] = str.split("\\]");
ArrayList<String>finalList = new ArrayList<>();
for(String s:bal)
{
finalList.add(s+"]");
}
System.out.println(finalList);
(?:(?<=\])|^)(?=\[)
如果两者之间没有任何内容,则使用此拆分可能会起作用][