使用Regex在String中获取部分句子

时间:2014-08-05 11:16:49

标签: java regex string

我有这句话,我想操纵并获取其信息:

  

您好。基于公平使用的数据分配   政策 10,240.0MB 。目前的使用量是 2,858.6MB 。平衡:   的 7,381.4MB 即可。您的计划将续订: 00:00:00 28-08-2014

我想只采取大胆的部分。我一直在考虑使用Regex来操纵它,但由于结构复杂,我还没有想出办法。

任何人都可以指导我吗?我正在使用Java来做这件事。

2 个答案:

答案 0 :(得分:2)

要匹配与10,240.0MB类似的部分,您可以使用

\b\d{1,3}(?:,\d{3})*[.]\d[KMGT]B\b

Regular expression visualization

Debuggex DemoRegex101 Demo

要匹配00:00:00 28-08-2014等部分,您可以使用

\b\d{2}:\d{2}:\d{2} \d{2}-\d{2}-\d{4}\b

Regular expression visualization

Debuggex DemoRegex101 Demo

如果要组合这两个正则表达式,只需使用OR运算符|。此外,您必须在String中转义\以创建此类文字。所以在Java中你需要把它写成

String regex = "\\b\\d{1,3}(?:,\\d{3})*[.]\\d[KMGT]B\\b"
        + "|\\b\\d{2}:\\d{2}:\\d{2} \\d{2}-\\d{2}-\\d{4}\\b";

答案 1 :(得分:1)

如果您完全确定字符串将始终与此类似,则可以使用此正则表达式。

public static void main(String[] args) {
    String s = "Hello. Yr data allocation based on Fair Usage Policy is 10,240.0MB. Yr current usage is 2,858.6MB. Balance: 7,381.4MB. Your plan will be renewed on: 00:00:00 28-08-2014.";
    Pattern p = Pattern
            .compile("(\\d+.*?MB)|(\\d{2}:\\d{2}:\\d{2}\\s\\d{2}-\\d{2}-\\d{4}\\.)");
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group());
    }
}

O / P:

10,240.0MB
2,858.6MB
7,381.4MB
00:00:00 28-08-2014.