正则表达式从任意货币格式中提取美分值
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 位数字之后没有数字。
详细了解 。
我需要使用 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 位数字之后没有数字。
详细了解