Java 用于匹配不同浮点格式的正则表达式
我正在寻找scala中的正则表达式以匹配多个浮点:Java 用于匹配不同浮点格式的正则表达式,java,regex,scala,Java,Regex,Scala,我正在寻找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 所以基本上它应该匹配一个数字: 编号列表很容易 可能给出了千个分隔符(逗号或点) 可能是以逗号或点作
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}+)?)"
编辑:我最关心的是欧洲符号
当前模式不匹配的示例:1052161
我想,如果字符串只包含数字、符号、逗号和点,这将非常接近。如果,正如您的编辑所建议的那样,您愿意接受一个简单地“包含数字、符号、逗号和点”的字符串,那么任务就很简单了
[+-]?\d[\d.,]*
更新
经过仔细考虑,并考虑了一些选项后,我意识到,如果您允许两种不同的重新模式,一种用于美国样式的数字(点之前的逗号)和一种用于欧洲样式的数字(点之前的逗号),您最初的请求是可能的
请注意,千位分隔符不是可选的,因此像“1234”
这样的数字不会被评估为有效。这可以通过添加更多的重新模式来更改:|num.matches(“[+-]?\\d+”)
基于您的规则
它应与以下数字匹配:
- 编号列表很容易
- 可能给出了千个分隔符(逗号或点)
- 可能是以逗号或点作为分隔符的十进制
^[+-]?\d{1,3}(?:[,.]\d{3})*(?:[,.]\d+)?$
允许[+-]?
或+
或在开始时不执行任何操作-
允许一到三位数字\d{1,3}
允许([,.]\d{3})
或
作为千位分隔符,后跟3位数字(,
允许无限的此类匹配)*
允许将(?:[,.]\d+)
或
作为十进制分隔符,后跟至少一位数字,
或,
作为千位分隔符和十进制分隔符,并且不验证如果,
是千位分隔符,那么
应该是十进制分隔符。因此,以下情况不正确地显示为匹配:
201,350,780,88
211.950.266.4
为了解决这个问题,前面的正则表达式可以有两个替代方法-一个用于检查具有,
作为千位分隔符和
作为十进制的表示法,另一个用于检查反之亦然的表示法。正则表达式:
^[+-]?\d{1,3}(?:(?:(?:\.\d{3})*(?:\,\d+)?)|(?:(?:\,\d{3})*(?:\.\d+)?))$
希望这有帮助 你目前的模式有什么问题?什么值不应该匹配?使用这个
“^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$”
我认为你对正则表达式的要求太高了。特别是:零个或多个适当间隔的千位分隔符(可能是逗号,也可能是点),以及零或一个分数分隔符(与千位分隔符不同)。将所有这些规则放在一个RE中并不容易。千位分隔符用词不当,因为有些国家每两位数使用一次分隔符。例如,印度使用了一种新方法。此外,有些国家使用空格作为分隔符。您是否故意忽略,例如6.02e23
?
^[+-]?\d{1,3}(?:(?:(?:\.\d{3})*(?:\,\d+)?)|(?:(?:\,\d{3})*(?:\.\d+)?))$