我有以下字符串3.14,123.56f,.123e5f,123D,1234,343E12,32。 我想要做的是匹配上述输入的任何组合。到目前为止,我从以下开始:
^[0-9]\d*(\.\d+)
我意识到我必须逃避。因为它本身就是正则表达式。
感谢。
答案 0 :(得分:2)
可能
^(\d+(\.\d+)?|\.\d+)([eE]\d+)?[fD]?$
^ 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]?$