regex匹配第行中的两组数字



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

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

有什么资源可以引导我朝着正确的方向前进吗?我坚持要分别匹配第二个。欢呼

您可以继续regex模式并捕获另一个单词后面的第二个数字:

bOxs+(d*.?d+)s+S+s+(d*.?d+)

请参阅regex演示。第二个数字将在第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
} 
}
}

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

最新更新