正则表达式提取数字并用千位分隔符对它们进行分组
Posted
技术标签:
【中文标题】正则表达式提取数字并用千位分隔符对它们进行分组【英文标题】:Regex to extract numbers and group them with thousands separator 【发布时间】:2014-12-19 23:07:58 【问题描述】:在我的计算器应用程序中,我有一个这样的字符串
String input = "-.46sin(34)*23000.34(2^3"
我想给字符串中的数字添加千位分隔符 这样输出就会像:
-.46sin(34)*23,000.34(2^3
如何使用 regex 实现这一点?我使用的语言是 Java,浮点精度是 6
更新:
Ulugbek Umirov 在评论中的最终答案是正确答案
正则表达式:(?<!\.\d0,6)\d+?(?=(?:\d3)+(?:\D|$))
Java 代码:String output = input.replaceAll("(?<!\\.\\d0,6)\\d+?(?=(?:\\d3)+(?:\\D|$))", "$0,");
【问题讨论】:
你有代码吗? 一般来说,我建议使用正则表达式解析数字(\d
派上用场),然后用其他格式对其进行格式化。如果您的应用是一个计算器,那么要评估这样的表达式,您无论如何都必须解析和构建一个 AST。
@Paul Vargas 我认为不需要任何代码。这是一个普遍的问题...我打算使用 regex 使用 java 的 String.replace(Target,Replacement) 方法
【参考方案1】:
以下正则表达式可以为您提供思路:
(?<!\d\.\d0,6)\d+?(?=(?:\d3)+(?:\D|$))
将其替换为$0,
Demo
【讨论】:
Ulugbek Umirov 只有一件事......当我将它与这个测试用例一起使用时,".46sin(34)*23000.34+.5623(0.3333^3*1300000" 浮点数 .5623 也得到了逗号。有没有办法解决这个问题? @9patchcoder 是的,我假设点之前总是有一个数字。您可以使用以下正则表达式删除此假设:(?<!\.\d0,6)\d+?(?=(?:\d3)+(?:\D|$))
以上是关于正则表达式提取数字并用千位分隔符对它们进行分组的主要内容,如果未能解决你的问题,请参考以下文章