正则表达式将小数与字母匹配

时间:2011-10-10 17:31:32

标签: regex

我有以下字符串3.14,123.56f,.123e5f,123D,1234,343E12,32。 我想要做的是匹配上述输入的任何组合。到目前为止,我从以下开始:

^[0-9]\d*(\.\d+)

我意识到我必须逃避。因为它本身就是正则表达式。

感谢。

5 个答案:

答案 0 :(得分:2)

可能

^(\d+(\.\d+)?|\.\d+)([eE]\d+)?[fD]?$

http://regexr.com?2ut9t

^ start of the string
(\d+(\.\d+)?|\.\d+) one or more digits with an optional ( . and one or more digits)
  or
. and one or more digits
([eE]\d+)? an optional ( e or E and one or more digits)
[fD]? an optional f or D
$ end of the string

作为旁注,我已使D与除f之外的所有内容兼容。

如果您需要正号和负号,请在[+-]?

之后添加^

答案 1 :(得分:2)

这将匹配所有这些:

[0-9.]+(?:[Ee][0-9.]*)?[DdFf]?

请注意,在字符类(方括号)中,点.不是特殊字符,不应转义。

答案 2 :(得分:2)

如果尚未提出,这也应该有效。

try {
    Pattern regex = Pattern.compile("\\.?\\b[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?[fD]?\\b", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        // matched text: regexMatcher.group()
        // match start: regexMatcher.start()
        // match end: regexMatcher.end()
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

答案 3 :(得分:1)

也许那个?

^\d*(?:\.\d+)?(?:[eE]\d+)?(?:[fD])?$

^\d*         #possibly a digit or sequence of digits at the start
(?:\.\d+)?    #possibly followed by a dot and at least one digit
(?:[eE]\d+)?  #possibly a 'e' or 'E' followed by at least one digit
(?:[fD])?$    #optionnaly followed by 'f' or 'D' letters until the end

答案 4 :(得分:0)

您可以使用regexpal对其进行测试,但这似乎适用于所有这些示例:

^\d*\.?(\d*[eE]?\d*)[fD]?$