正则表达式Android数字

时间:2013-10-24 05:50:09

标签: java android regex

因为正则表达式,我一直在这场战斗中。

我在回应[14-23.0, 14-23, 23.320]中得到了类似的内容。我将在步骤中清楚地解释。

  

a)响应中的值应设置为EditText。(我已完成)
  b)不应验证应对的价值   c)应该验证除响应之外的其他值。

以下是无需验证的字符串。

  

A)14-23.0
  B)14-23
  C)23.320

需要验证的场景。

  

A)14--23.0
  B)1.4-23.0
  C)14-2.3.0

以下代码我使用了哪些无效,

public static String BondPricePatternValidation(String mString){

        String pattern = "(\\d+)-(\\d+).(\\d+)";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(mString);
        if (m.find( )) {
            System.out.println("Found value: " + m.group(0) );
            System.out.println("Found value: " + m.group(1) );
            System.out.println("Found value: " + m.group(2) );
        } else {
            System.out.println("NO MATCH");
        }
        return pattern;

    }

有人可以帮我正则表达式吗?

2 个答案:

答案 0 :(得分:1)

^(\\d+-)?(\\d+)\\.?\\d+$应该可以解决问题。

请告诉我它是否符合您的需求。

答案 1 :(得分:1)

我不确定我理解你的问题。所以,让我按照我的理解重新陈述你的问题。您正在寻找一个正则表达式,它只允许(1)单独的浮点数,或(2)类似整数的数字和另一个整数之间的范围一个漂浮的数字,严格地说在它们之间有一个短划线。可能这不完全是这样,但让我回答问题这个的方式,当你澄清我会编辑。

让我们从第二个选择 rangE 开始。你可能不想要0004这样的数字,所以这里是你如何匹配“常规”整数:

[1-9]\\d*

然后,你只想要一个破折号,很容易:

[1-9]\\d*-

然后,除了这个之外的另一个数字可以是浮点数,所以让我们使用量词?

[1-9]\\d*-[1-9]\\d*(?:\\.\\d+)?

现在,要完成此操作,我们只需将整个范围部分设为可选:

[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?

那应该是它。顺便说一句,正如你所看到的,你需要逃避. s,否则它们代表通配符。

最后一点是关于锚定。您可以在每一端添加^$,以免在每一方都允许其他字符:

^[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?$

但是,如果您打算在更大的文本块中匹配此模式,则需要使用负面的lookbehind断言:

(?<![1-9])[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?