如何用Java正则表达式提取两种格式的价格数字?
合并正则匹配两种价格格式的解决方案
没问题,我来帮你把两个正则合并成一个,同时匹配带空格分隔和不带空格的价格格式,还能准确提取价格数字!
最终正则表达式
\bPrice\sR\s(\d+(?:\s\d+)*)
正则各部分解释
让我拆解一下这个正则的逻辑,帮你理解为什么它能同时适配两种格式:
\bPrice\sR\s:精准匹配固定前缀“Price R ”,\b确保“Price”是一个完整的单词,避免误匹配类似“XPrice”的字符串;(\d+(?:\s\d+)*):这是捕获价格的核心部分:\d+:匹配开头的一串数字(比如3或者500);(?:\s\d+)*:这是一个非捕获组,(?:...)表示这个组只用于匹配、不会被单独捕获;\s\d+匹配“空格+一串数字”,*表示这个组合可以出现0次或多次——这样既可以匹配不带空格的纯数字(0次),也可以匹配带单个空格的数字(比如3 250),甚至支持多段空格分隔的数字(比如1 000 500这种千分位格式)。
测试示例
- 对于字符串:
Name ProductA Price R 3 250,捕获组会提取到3 250; - 对于字符串:
Name ProductA Price R 500,捕获组会提取到500。
如果之后需要把带空格的价格转换成连续数字(比如把3 250变成3250),只需要对捕获到的结果做一次空格替换操作就可以啦。
内容的提问来源于stack exchange,提问作者Cornel Verster
相关产品推荐
相关产品推荐

