我希望Java Pattern.compile识别正整数或负整数或小数

时间:2017-06-01 12:41:29

标签: java regex matcher

在Java中我想使用Pattern.compile(String regexp)来查找负整数或正整数。

实施例。 (1)(11)(1.1)(11.11)( - 1)( - 11)( - 1.1)( - 11.11)

我在网上找到了几个答案,告诉我这是正确的正则表达式,但它一次性忽略“ - ”符号。

Pattern pattern1 = Pattern.compile("(\\-?\\d+(\\.\\d+)?)");

5 个答案:

答案 0 :(得分:0)

试试这个:

Pattern pattern1 = Pattern.compile("(-|\\+)?\\d+");

这应该匹配正整数和负整数。

对于小数(应匹配整数或小数):

Pattern pattern2 = Pattern.compile("(-|\\+)?\\d+((\\.{1}\\d+)?)");

答案 1 :(得分:0)

 String regex = "(-)?\\d+([.]\\d+)?";

我们允许一个可选的减号( - )?对于负数和一个可选的小数点([。]),后跟数字(\ d)表示十进制数。

 String regex = "(-)?\\d+([.]\\d+)?";
 Pattern pattern = Pattern.compile(regex);
 String input = "-0.123";
 Matcher matcher = pattern.matcher(scr);
 System.out.println(matcher.matches()); //Prints true.

答案 2 :(得分:0)

我刚刚测试了你的模式,它运行正常。也许我不明白这个问题,但这里是我使用的源代码。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Play {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Pattern p = Pattern.compile("(\\-?\\d+(\\.\\d+)?)");

        Matcher m = p.matcher("(1) (11) (1.1) (11.11) (-1) (-11) (-1.1) (-11.11)");

        while (m.find()) {
            System.out.println("Found a " + m.group());
        }

    }
}

结果是

run:

Found a 1
Found a 11
Found a 1.1
Found a 11.11
Found a -1
Found a -11
Found a -1.1
Found a -11.11
BUILD SUCCESSFUL (total time: 0 seconds)

如果您想要包含括号,请使用此模式 [(][+-]?([0-9]*[.])?[0-9]+[)]

答案 3 :(得分:0)

解决方案:出于某种原因" - "是不被识别的,所以我尝试了unicode版本,regexp允许unicode通过做\ u2212 a.k.a.(\ - )。这解决了我的问题,我不知道为什么它在这之前不会起作用。

答案 4 :(得分:0)

Pattern p = Pattern.compile("(-?(\\d+(\\.?\\d+)))");
Matcher m = p.matcher(YourString);
//m.group(1);