Java 正则表达式从任意货币格式中提取美分值
我需要使用Java正则表达式从下一个可能的值中提取美分值(千位分隔符可以是点和逗号): 我有一个部分有效的解决方案:Java 正则表达式从任意货币格式中提取美分值,java,regex,regex-lookarounds,Java,Regex,Regex Lookarounds,我需要使用Java正则表达式从下一个可能的值中提取美分值(千位分隔符可以是点和逗号): 我有一个部分有效的解决方案: [\.,]\d\d\D 我的解决方案的问题是,当最后一个数字是字符串的结尾时,它在大小写“123456.78”中不起作用。我怎么处理这个案子 请注意,\D要求在模式中的、/后面有一个非数字的字符和两个数字。如果要确保不使用(需要)任何数字,请使用负前瞻: [.,](\d{2})(?!\d) ^^^^^^ 看 详细信息: [,]-一个点或逗号(在不同的
[\.,]\d\d\D
我的解决方案的问题是,当最后一个数字是字符串的结尾时,它在大小写“123456.78”中不起作用。我怎么处理这个案子
请注意,
\D
要求在模式中的、
/
后面有一个非数字的字符和两个数字。如果要确保不使用(需要)任何数字,请使用负前瞻:
[.,](\d{2})(?!\d)
^^^^^^
看
详细信息:
-一个点或逗号(在不同的国家,而不仅仅是美国,支持十进制分隔符)[,]
-组1(由于(\d{2})
出现在捕获组\d{2}
内,因此可以使用(…)
)匹配器访问其值。组(1)
-一种负向前瞻,要求在前两个数字后面没有数字(?!\d)
查看有关的详细信息。那么您希望将
78
作为输出?将\D
设置为可选,或者最好将正则表达式更改为类似(?:\D+,)*(?:\D+)\(\D+)。(\D+)
,即匹配整个字符串并提取小数点后的数字。尝试[,](\D{2})(?!\D)
Wiktor,它可以工作,你能给出一个答案并解释一下吗\d部分?您可能还想尝试replaceAll(“.\\\.”(\\d+\\d*”,“$1”)
[.,](\d{2})(?!\d)
^^^^^^