0

我有一个这样格式化的字符串

[dgdds,dfse][fsefsf,sefs][fsfs,fsef]

我将如何使用 Regex 快速解析它以返回一个 ArrayList,其中每个值都包含一个“条目”?

ArrayList <String>:

0(String): [dgdds,dfse]

1(String): [fsefsf,sefs]

2(String): [fsfs,fsef]

真的坚持这一点,任何帮助都会很棒。

4

7 回答 7

3

怎么样

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]

此正则表达式将使用后视机制在].

于 2013-11-06T22:15:43.300 回答
3

你应该试试这个正则表达式:
Pattern pattern = Pattern.compile("\\[\\w*,\\w*\\]");

于 2013-11-06T22:18:16.777 回答
2

旧的,简单的,很棒的方式:)

String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
        String[] token = s.split("]");
        for (String string : token) {
            System.out.println(string + "]");
        }
于 2013-11-06T22:21:44.247 回答
1

您可能需要分两次完成:

(1)如果它只是一个一维数组(问题中不清楚),则用括号拆分:

String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
String[] sArray = s.split("\\[|\\]\\[|\\]");

(2)如果你也想分开,用逗号分开,说“dgdds,dfse”

sArray[i].split(",");
于 2013-11-06T22:16:47.627 回答
1

您可以使用简单的正则表达式,这意味着:\[.*?\]匹配以.[?.*?]

这有效,您可以在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]]
于 2013-11-06T22:18:40.693 回答
1

我们可以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);
于 2013-11-06T22:25:22.247 回答
1

(?:(?<=\])|^)(?=\[)如果两者之间没有任何内容,则使用此拆分可能会起作用][

于 2013-11-06T23:15:06.690 回答