【问题标题】:Regex to match currency with or without thousands seperator java正则表达式匹配货币有或没有千位分隔符java
【发布时间】:2016-12-21 11:00:08
【问题描述】:

我想匹配有或没有任何千位分隔符和/或小数的货币。

字符串示例

String part =  "R4,491.25"; // must be able to match more ex : R12,550,000.60

我有什么

if( part.matches("\\R\\d*[.,\\s\\d*]+")){
   System.out.println("C [" + part + "]");
}

找到这个Regex for number with decimals and thousand separatorPython regex to match currency with or without comma or decimal

但两者都没有完成我所需要的。在 Javascrpt 中使用 regex101 我的例子似乎工作 https://regex101.com/r/rK2jMU/4

如何改进或更改我的正则表达式以满足上述要求?

提前致谢。

【问题讨论】:

  • 你应该删除R之前的转义反斜杠。
  • 你能把它放在一个答案中,这样我就可以接受了。谢谢它的工作

标签: java regex string


【解决方案1】:

您的正则表达式匹配换行符(\R 匹配 Java 8 正则表达式中的换行符)作为第一个符号。

所以,修复看起来像

part.matches("R\\d*[.,\\s\\d*]+")

您可能想尝试另一个更精确的正则表达式(但不允许空整数部分):

"R(?:\\d{1,3}(?:[\\s,]\\d{3})+|\\d+)(?:\\.\\d+)?"

这里是this regex demo fiddle

【讨论】:

  • 伟大的将使用您的精确。 ^R(?:\\d{1,3}(?:[\\s,]\\d{3})+|\\d+)(?:\\.\\d+)?$
  • 请注意,对于String.matches,您不需要添加^$,因为该模式默认是锚定的(= 需要完整的字符串匹配)。
  • 会这样修改。不知道。 :) 谢谢
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2014-12-28
  • 2022-08-06
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多