我在scala中寻找一个正则表达式来匹配几个float:
9,487,346 -> should match
9.487.356,453->should match
38,4 -> match
-38,4 -> should match
-38.5
-9,487,346.76
-38 -> should match
字符串
所以基本上它应该匹配一个数字:
1.可能给出了千个分隔符(逗号或点)
1.也可能是小数,用逗号或点作为分隔符
目前我被困在
val pattern="\\d+((\\.\\d{3}+)?(,\\d{1,2}+)?|(,\\d{3}+)?(\\.\\d{1,2}+)?)"
型
编辑:我主要关注欧洲符号。
当前模式不匹配的示例:1,052,161
我猜它将是足够接近的匹配,字符串只包含数字,符号,逗号和点
2条答案
按热度按时间ctehm74n1#
如果像你的编辑建议的那样,你愿意接受一个简单的“包含数字、符号、逗号和点”的字符串,那么这个任务是微不足道的。
字符串
更新
在仔细考虑之后,并考虑了一些选项,我意识到如果您允许2种不同的RE模式,一种用于美国风格的数字(点前的逗号),另一种用于欧洲风格的数字(逗号前的点),那么您最初的请求是可能的。
型
请注意,千位分隔符不是可选的,因此像
"1234"
这样的数字不会被评估为有效。u0sqgete2#
根据你的规定
它应该匹配一个数字:
Regex:
字符串
[+-]?
开始时允许+
或-
或什么都不允许\d{1,3}
允许1到3位数字([,.]\d{3})
允许.
或,
作为千位分隔符,后跟3位数(*
允许无限制的匹配)(?:[,.]\d+)?
允许.
或,
作为小数分隔符,后面至少有一个数字。这与OP的所有示例案例相匹配。请查看下面的演示以了解更多信息:
Regex101 Demo
然而,它的一个限制是允许
.
或,
作为千位分隔符和小数点分隔符,并且不验证如果,
是千位分隔符,那么.
* 应该是 * 小数点分隔符。因此,以下情况错误地显示为匹配:型
为了解决这个问题,前面的正则表达式可以有两个替代方案-一个用于检查以
,
作为千位分隔符和.
作为十进制的表示法,另一个用于检查反之亦然。型
Regex101 Demo的
希望这对你有帮助!