Java 用正则表达式提取两组数

Java 用正则表达式提取两组数,java,android,regex,Java,Android,Regex,我有下面的字符串,我想通过在java(android studio)中使用正则表达式从中提取150和136,这两个数字都在MB之前(它们之间存在空格),有时第二个数字不存在,我如何提取它们 要分开分组吗 "Your Day Traffic is 150 MB and your Night Traffic is 136 MB " 给我两组像这样的人: group 1 ==> "150" group 2 ==> "136" 最佳答案: 在egex101.com中进行了一些搜索和尝试后

我有下面的字符串,我想通过在java(android studio)中使用正则表达式从中提取150和136,这两个数字都在MB之前(它们之间存在空格),有时第二个数字不存在,我如何提取它们 要分开分组吗

"Your Day Traffic is 150 MB and your Night Traffic is 136 MB "
给我两组像这样的人:

group 1 ==> "150"
group 2 ==> "136"
最佳答案:

在egex101.com中进行了一些搜索和尝试后,我找到了我的答案:

    Pattern p = Pattern.compile("^[^\\d]*(\\d+(?:\\.\\d+)?) MB(?:[^\\d]+(\\d+(?:\\.\\d+)?) MB)?.*$");//. represents single character
    Matcher m = p.matcher("Your Day Traffic is 150 MB and your Night Traffic is 136 MB");

    while (m.find()) {
        System.out.println("group 1 ==>" + m.group(1));
        System.out.println("group 2 ==>" + m.group(2));
    }
我明白了:

group 1 ==>150
group 2 ==>136

您可以使用这个正则表达式
((\d+)\sMB)
如果数字和
MB
之间有一个或多个空格,您可以使用
\s+
匹配一个或多个空格,您可以使用模式来完成这一切

String text = "Your Day Traffic is 150 MB and your Night Traffic is 136 MB ";
String regex = "((\\d+)\\sMB)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
int group = 1;
while (matcher.find()) {
    System.out.println("group " + group++ + " ==> " + matcher.group(2));
}
在您的情况下,输出为:

group 1 ==> 150
group 2 ==> 136

请阅读正则表达式上的java文档

基本上,您必须忽略两个“[number]MB”出现之间的字符。在这种情况下,您可以使用这样的正则表达式-

/.*\s+(\d+)\s+MB.*\s+(\d+)\s+MB/
这里给出了完整的代码-

import java.util.regex.*;  

public class MatchMB {  
  public static void main(String args[]){  
  Pattern p = Pattern.compile(".*\\s+(\\d+)\\s+MB.*\\s+(\\d+)\\s+MB");  
  Matcher m = p.matcher("Your Day Traffic is 150 MB and your Night Traffic is 136 MB");  

  while (m.find()) {
    System.out.println("group 1 ==>" + m.group(1));
    System.out.println("group 2 ==>" + m.group(2));
  }
}

有时第二个数字(136)不存在,所以我不能得到第一个数字;我怎么能修好它?“您的日间流量为150MB,没有夜间流量”如果您有新问题,请另外提问。您的正则表达式不必要复杂。试着在你的生活中找到重要的部分data@Logan什么意思根本不起作用,你能解释一下吗?这个正则表达式找不到数字检查这个并检查@Logan可能有更好的方法,为了确保只得到一个或两个结果,你可以用这种方法代替