匹配一行中的两组数字。(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.]*)
。