检查要匹配的模式(具有双精度值)。正则表达式

时间:2014-01-10 16:02:08

标签: java regex

我有两个字符串:

  1. 第一个字符串应匹配此模式:“anyDoubleValue anyDoubleValue anyDoubleValue”。请注意,这些双精度值用空格分隔。我对anyDoubleValue的意思是:任何整数或小数值。
  2. 第二个字符串应匹配此模式:“aSet aSet aSet”。集合“aSet”应该只有-1或0或1.还要注意这些集合用空格分隔。
  3. 我尝试了以下方法,但它们没有达到目的:

    if(aString.matches("[\\d\\s\\d\\s\\d]"){//do foo}
    if(anotherString.matches("[0-1\\s0-1\\s0-1]")){// do bar} 
    

3 个答案:

答案 0 :(得分:2)

第一个:

匹配双精度值的模式是 - "-?\\d+(.\\d+)?"。好的,这是一个非常普遍的。不考虑科学记数法。

因此,要获得double值和空格的序列,请使用:

// Removed non-captured group for readability purpose
(-?\\d+(\\.\\d+)?)(?:\\s(-?\\d+(\\.\\d+)?)){2}  

第二个:

(?:0|-?1)(\\s(?:0|-?1)){2}

答案 1 :(得分:1)

第一次匹配:

^(\d+(\.\d+)?)\s(\d+(\.\d+)?)\s(\d+(\.\d+)?)$

请注意,它允许带或不带小数部分的双值

Check on Regex 101

第二次匹配:

^(\-1|0|1)\s(\-1|0|1)\s(\-1|0|1)$

Check on Regex 101

答案 2 :(得分:0)

第一个:

"-?[0-9](?:\\.[0-9]+)? -?[0-9](?:\\.[0-9]+)? -?[0-9](?:\\.[0-9]+)?"

第二个:

"(?:0|-?1) (?:0|-?1) (?:0|-?1)"