Java中用正则表达式表示实数的方法,满足以下条件

Java中用正则表达式表示实数的方法,满足以下条件,java,regex,Java,Regex,我试图通过使用java模式类和Matcher类来表示一个实数(0.323、1、4、-123、0、-234.43等等) 但我们有几个条件 当数字为正数时省略+符号(因此只有-符号) 当0位于小数点后几位时,省略0 ex)123.032130000→ 123.03213 当小数点为整数时,省略小数点 ex)123.00→ 123 与2类似,在整数前面省略0 ex)001243→ 1243 数字0前面不允许有符号 ex)-0和+0→ 0 所以我的答案是 但我有个问题。 我没有计算“-0.xxxx”的案

我试图通过使用java模式类和Matcher类来表示一个实数(0.323、1、4、-123、0、-234.43等等)

但我们有几个条件

  • 当数字为正数时省略+符号(因此只有-符号)
  • 当0位于小数点后几位时,省略0 ex)123.032130000→ 123.03213
  • 当小数点为整数时,省略小数点 ex)123.00→ 123
  • 与2类似,在整数前面省略0 ex)001243→ 1243
  • 数字0前面不允许有符号 ex)-0和+0→ 0 所以我的答案是
  • 但我有个问题。 我没有计算“-0.xxxx”的案例 在我看来,-只能在有小数点的情况下定位在0的前面。。。。 我想了很多,但别无选择,只能添加|分隔符并键入-0.xxxxxx的大小写


    那么,有没有办法不使用分隔符来表示正则表达式???

    以下是您给出的示例:

    ([1-9]+)(\[0]+[1-9]+)?


    有时最简单的方法是将您的意思编码为:

    • 零本身,或
    • 可能是有符号的零,后跟小数点和不以零结尾的数字,或
    • 可能是不以零开头的有符号数字序列,可选后跟小数点和不以零结尾的数字
    这看起来像:

    String pattern = "^"
        + "0"
        + "|-?0\\.[0-9]*[1-9]"
        + "|-?[1-9][0-9]*(\\.[0-9]*[1-9])?"
        + "$";
    
    Matcher matcher = Pattern.compile(pattern).matcher(validNumber);
    boolean validNumber = matcher.matches();
    
    // You don't actually need an explicit Matcher at all:
    //boolean validNumber = inputString.matches(pattern);
    

    你的正则表达式看起来很好!为什么不使用分隔符?为什么不添加另一个组,如“
    ”^-(?:[1-9][0-9]*| 0)(?:\\.[0-9]*[1-9])?$”
    ?查看@WiktorStribiżew您的建议允许
    -0
    好吧,
    ^(-0$)-(?:[1-9][0-9]*\1240)(?:\.[0-9]*[1-9])?$
    。在您的情况下,-0.xxxx无法匹配…包括0.xxxxxx只需在开头添加一个
    [1-9]*[0-9]
    。此外,例如,在十进制分隔符之后必须允许有更多的零来匹配
    1.00005
    String pattern = "^"
        + "0"
        + "|-?0\\.[0-9]*[1-9]"
        + "|-?[1-9][0-9]*(\\.[0-9]*[1-9])?"
        + "$";
    
    Matcher matcher = Pattern.compile(pattern).matcher(validNumber);
    boolean validNumber = matcher.matches();
    
    // You don't actually need an explicit Matcher at all:
    //boolean validNumber = inputString.matches(pattern);