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

时间:2016-11-16 09:46:42

标签: java regex regex-lookarounds

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

$123,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

1 个答案:

答案 0 :(得分:2)

请注意,\D要求字符不是, / .之后的数字,而是模式中的2位数字。如果你想确保没有数字而没有消费(需要它),请使用否定前瞻:

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

请参阅regex demo

<强>详情:

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

详细了解how negative lookahead works