Java中用于匹配正负十进制数的正则表达式

6

我需要一个正则表达式来匹配包含负和正小数的字符串,以便正确实现模式匹配和查找。请帮我提供一个。

4个回答

15
(\+|-)?([0-9]+(\.[0-9]+))

 


将第二个+替换为*,以匹配像“.4”这样的内容(归功于下面错误答案中的注释)。 - Ryan Shillington
1
对于任何使用此方法在仅限数字的文本框上进行验证的人,如果您的正则表达式引擎支持它,您可以将表达式用起始和结束锚点包装起来,例如 ^(\+|-)?([0-9]+(\.[0-9]+))$ - kevin628
@kevin628 记住,有些正则表达式引擎需要打开标志才能使用起始和结束锚定符号。例如,我知道Java正则表达式需要在开头加上(?m)才能使用^$符号。 - Rossiar

8

试试这个!我也用过这种方法

"^-?[0-9]{1,12}(?:\.[0-9]{1,4})?$"

规则:

ex: ^-?[0-9]{1,12}(?:\.[0-9]{1,4})?$
^           # Start of string
[0-9]{1,12} # Match 1-12 digits (i. e. 0-999999999999)
(?:         # Try to match...
\.          # a decimal point
[0-9]{1,4}  # followed by one to three digits (i. e. 0-9999)
)?          # ...optionally
$            # End of string

4

试试这个:

[+-]?\d+\.\d+

请注意,此代码无法识别像“.4”(没有前导零)或“10”(没有小数点)这样的模式。但是考虑到“问题”的含糊性,我不知道是否存在这个问题。 - BlairHippo
是的,由于OP说了“十进制”,我认为小数点是必须的,但我也不确定那个可选整数。 - Rubens Farias
1
如果我们采用强制小数点,可以使用"[+-]?\d*.\d+"。至少处理了可选的前导0。 - BlairHippo
“Decimal”并不意味着非整数。如果 OP 说的是“二进制”或“八进制”呢?所有这些限定词只是限制数字范围。所有这样的数字可能有也可能没有小数部分。 - gary
@BlairHippo 给出了我能找到的最接近可行的答案。让我接近到达 @"^([+-]?\d*.\d+)$"。 - samuelesque

1
+ (BOOL)isStringADecimalNumber:(NSString *)string
{
    NSString *regex = @"([+]|-)?(([0-9]+[.]?[0-9]*)|([0-9]*[.]?[0-9]+))";

    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    BOOL stringIsADecimalNumber = [test evaluateWithObject:string];

    return stringIsADecimalNumber;
}

以下是返回此正则表达式的TRUE的数字: enter image description here enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接