Java 使用正则表达式在字符串中提取句子的一部分

Java 使用正则表达式在字符串中提取句子的一部分,java,regex,string,Java,Regex,String,我有一个句子,我想操纵它并获取它的信息: 你好。基于公平使用的Yr数据分配 策略为10240.0MB。年当前使用量为2858.6MB。余额: 7381.4MB。您的计划将于2014年8月28日00:00:00更新 我只想做大胆的部分。我一直在考虑使用正则表达式来处理这个问题,但由于结构复杂,我还没有找到一种方法 有人能指引我吗?我正在使用Java来实现这一点。如果您完全确定字符串始终与此类似,那么可以使用此正则表达式 public static void main(String[] args)

我有一个句子,我想操纵它并获取它的信息:

你好。基于公平使用的Yr数据分配 策略为10240.0MB。年当前使用量为2858.6MB。余额: 7381.4MB。您的计划将于2014年8月28日00:00:00更新

我只想做大胆的部分。我一直在考虑使用正则表达式来处理这个问题,但由于结构复杂,我还没有找到一种方法


有人能指引我吗?我正在使用Java来实现这一点。

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

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:

要匹配类似于10240.0MB的部件,可以使用

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

要匹配像00:00:00 28-08-2014这样的部件,您可以使用

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

如果要组合这两个正则表达式,只需使用OR运算符|。您还必须在字符串中转义\才能创建这样的文字。因此,在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";

是否有任何类似于粗体的值是您不想匹配的?如果字符串中有类似的模式,则应使用正则表达式。10240.0MB和00:00:00 2014年8月28日。不要完全形成一个模式。如果这个句子的唯一动态部分是粗体部分,那么使用子字符串+正则表达式可能更有意义,因为您知道前面的字符长度。删除x个字符。正则表达式匹配所有内容,直到MB重复。@TheLostMind谢谢: