[英]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.