Java RegEx拆分方法

时间:2016-11-19 02:00:18

标签: java regex

我希望将字符串“PICK TWO IN ORDER:10 2 T F”分成以下5个部分。

Str[0] = "PICK TWO IN ORDER"
Str[1] = 10
Str[2] = 2
Str[3] = T
Str[4] = F

我可以通过使用正则表达式“(:)”将字符串分成两部分,即字符串“PICK TWO IN ORDER”和“10 2 T F”。但是,我似乎无法弄清楚如何拆分第二部分。当使用“\ s”基于空格进行拆分时,它会将第一部分拆分为四部分。

无论如何都要限制正则表达式解析的字符串的哪一部分?或者我是否必须将其作为两步过程使用并相应地拆分它们?

感谢。

3 个答案:

答案 0 :(得分:4)

您可以在拆分中使用否定前瞻,仅在:后的空格上拆分。

String s = "PICK TWO IN ORDER: 10 2 T F";
String[] foo = s.split(":\\s|\\s(?!.*:)");

输出:

PICK TWO IN ORDER
10
2
T
F

答案 1 :(得分:0)

您可以编译Pattern,如果匹配,则使用它来填充数组。像,

String sentence = "PICK TWO IN ORDER: 10 2 T F";
Pattern p = Pattern.compile("(.+)\\:\\s+(\\d+)\\s+(\\d+)\\s+([T|F])\\s+([T|F])");
Matcher m = p.matcher(sentence);
String[] Str = null;
if (m.find()) {
    Str = new String[m.groupCount()];
    for (int i = 1; i <= Str.length; i++) {
        Str[i - 1] = m.group(i);
    }
}
System.out.println(Arrays.toString(Str));

这会产生与您的请求匹配的名为String[]的{​​{1}}。

Str

答案 2 :(得分:0)

最简单的方法就是分两步完成:

[PICK TWO IN ORDER, 10, 2, T, F]

...结果为String str = "PICK TWO IN ORDER: 10 2 T F"; String[] split1 = str.split(":"); String[] split2 = split1[1].trim().split("\\s+"); split1[0]