我正在寻找scala中的正则表达式来匹配几个浮点数:
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
所以基本上它应匹配一个数字:
目前我坚持
val pattern="\\d+((\\.\\d{3}+)?(,\\d{1,2}+)?|(,\\d{3}+)?(\\.\\d{1,2}+)?)"
编辑:我大多与欧洲记谱法合作。
当前模式不匹配的示例:1,052,161
我想它足够接近,以匹配String只包含数字,符号,逗号和点
答案 0 :(得分:1)
如果您的编辑建议,您愿意接受一个简单地“包含数字,符号,逗号和点”的字符串,那么该任务就很简单。
[+-]?\d[\d.,]*
<强>更新强>
经过深思熟虑,并考虑了一些选项,我意识到如果你允许2种不同的RE模式,一种用于美式数字(逗号在点之前)和一种用于欧式数字,我的原始请求是可能的。 (逗号前的点)。
def isValidNum(num: String): Boolean =
num.matches("[+-]?\\d{1,3}(,\\d{3})*(\\.\\d+)?") ||
num.matches("[+-]?\\d{1,3}(\\.\\d{3})*(,\\d+)?")
请注意,千位分隔符不是可选的,因此"1234"
之类的数字不会被视为有效。可以通过添加更多RE模式来更改:|| num.matches("[+-]?\\d+")
答案 1 :(得分:0)
根据您的规则,
它应匹配一个数字:
- 编号列表很简单
- 可能有千位分隔符(逗号或点)
- 可能是十进制,逗号或点为分隔符
正则表达式:
^[+-]?\d{1,3}(?:[,.]\d{3})*(?:[,.]\d+)?$
[+-]?
允许+
或-
或一开始就没有任何内容\d{1,3}
允许一到三位([,.]\d{3})
允许.
或,
作为千位分隔符后跟3位数字(*
允许无限次此类匹配)(?:[,.]\d+)?
允许.
或,
作为小数点分隔符,后跟至少一位数字。这匹配所有OP的示例案例。请查看下面的演示了解更多信息:
然而,一个限制是它允许.
或,
作为千位分隔符和十进制分隔符,并且不验证如果,
是千位分隔符然后.
应该是小数分隔符。因此,以下情况错误地显示为匹配:
201,350,780,88
211.950.266.4
为了解决这个问题,以前的正则表达式可以有2个备选方案 - 一个用于检查具有,
为千位分隔符和.
为十进制的符号,另一个用于检查反之亦然。正则表达式:
^[+-]?\d{1,3}(?:(?:(?:\.\d{3})*(?:\,\d+)?)|(?:(?:\,\d{3})*(?:\.\d+)?))$
希望这有帮助!