正则表达式从任意货币格式中提取美分值

Regex to extract cents value from arbitrary currency formatting

我需要使用 Java 正则表达式(千位分隔符可以是点和逗号)从下一个可能的值中提取美分值:

3,456.78 
123,456.78 dollars
123,456.78

我有部分可行的解决方案:

[\.,]\d\d\D

我的解决方案存在问题,当最后一位数字是字符串的末尾时,它在“123,456.78”的情况下不起作用。我该如何处理这种情况?

http://java-regex-tester.appspot.com/regex/6af08221-63cb-4c5b-a865-c86fe5e825ff

请注意,\D 需要在 ,/. 和模式中的 2 位数字之后输入一个非数字字符。如果你想确保没有数字而不消耗(需要它)使用负前瞻:

[.,](\d{2})(?!\d)
           ^^^^^^ 

参见regex demo

详情:

  • [.,] - 点或逗号(以支持不同国家/地区的小数点分隔符,而不仅仅是 U.S。)
  • (\d{2}) - 第 1 组(因为 \d{2} 出现在捕获组 (...) 内,您可以使用 Matcher.group(1) 访问它的值)
  • (?!\d) - 负前瞻要求在前 2 位数字之后没有数字。

详细了解