我需要使用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
答案 0 :(得分:2)
请注意,\D
要求字符不是,
/ .
之后的数字,而是模式中的2位数字。如果你想确保没有数字而没有消费(需要它),请使用否定前瞻:
[.,](\d{2})(?!\d)
^^^^^^
请参阅regex demo。
<强>详情:
[.,]
- 一个点或逗号(支持不同国家/地区的小数分隔符,而不仅仅是美国。)(\d{2})
- 第1组(由于\d{2}
出现在捕获组(...)
内,您可以使用Matcher.group(1)
访问其值} (?!\d)
- 负前瞻,要求在前两位数字后面没有数字。