繁体   English   中英

正则表达式匹配行中的两组数字

[英]regex match two sets of digits from line

匹配一行中的两组数字。 (2.66 和 34.3)。 这些罐头数字的长度是可变的,但被空格包围。 例如Ox 2.66 abcda 34.3 abfdasd

我用\b(?:Ox)\s+(\d*\.*?\d+)得到 2.66

有什么资源可以引导我朝着正确的方向前进吗? 我坚持单独匹配第二个。 干杯

您可以编写以下正则表达式: ([\d\D\s]*) 如果您只需要数值,则([\d\.]*)

您可以继续正则表达式模式并在另一个单词之后捕获第二个数字:

\bOx\s+(\d*\.?\d+)\s+\S+\s+(\d*\.?\d+)

请参阅正则表达式演示 第二个号码将在第 2 组。

详情

  • \b - 单词边界
  • Ox ——一个字Ox
  • \s+ - 一个或多个空格
  • (\d*\.?\d+) - 第 1 组:零个或多个数字,可选的. , 一位或多位数字
  • \s+ - 一个或多个空格
  • \S+ - 一个或多个非空格
  • \s+ - 一个或多个空格
  • (\d*\.?\d+) - 第 2 组:零个或多个数字,可选的. , 一位或多位数字。

查看Java 演示

import java.util.*;
import java.util.regex.*;
 
class Test
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String s = "Ox   2.66 abcda   34.3 abfdasd";
        Pattern pattern = Pattern.compile("\\bOx\\s+(\\d*\\.?\\d+)\\s+\\S+\\s+(\\d*\\.?\\d+)");
        Matcher matcher = pattern.matcher(s);
        while (matcher.find()){
            System.out.println(matcher.group(1)); // => 2.66
            System.out.println(matcher.group(2)); // => 34.3
        } 
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM