是否可以使用正则表达式对数字进行舍入?问题是我在文件中有大量超过2位小数的数字,我需要将它们移动到2位小数。
它在源文件中,所以理想情况下我想使用Visual Studio的查找和替换,但我并不反对编写脚本来运行该文件(将其视为纯文本),如果正则表达式没有有答案。
答案 0 :(得分:7)
你不能单独使用正则表达式,正如Ryan指出的那样,但你可以使用正则表达式在输入中查找小数,并在替换操作中使用回调函数。
在Python中:
>>> import re
>>> text = "1.234 and 99.999; .555 12.345"
>>> simpledec = re.compile(r"\d*\.\d+")
>>> def mround(match):
... return "{:.2f}".format(float(match.group()))
...
>>> re.sub(simpledec, mround, text)
'1.23 and 100.00; 0.56 12.35'
匹配小数的正则表达式非常简单;例如,它与指数表示法不匹配,但它应该给你一个想法。
答案 1 :(得分:5)
我不认为你可以对数字进行舍入,因为正则表达式不能添加。
你可以按如下方式截断它们(这可以在Notepad ++中使用):
找到(\d*\.\d\d)\d*
替换为\1
答案 2 :(得分:3)
嗯......至少你可以搜索(\d+\.\d\d\d)\d*
并将其替换为round($1, 2)
。
是的,也许这不是你所期望的那样:)
答案 3 :(得分:0)
我想出了一个简单的方法,可以在一组Google BigQuery结果中舍入结果 - 它们的SQL子集不会让你舍入到特定的小数位,但它确实支持正则表达式。< / p>
因为正如上面提到的那样,正则表达式无法添加,所以只要你能以某种方式为每个值添加一个常量,你仍然可以在那里得到剩余的部分:
+ 0.5 if you're rounding up to the nearest integer
+ 0.05 if you are rounding up to the nearest 0.1
+ 0.005 if you are rounding up to the nearest 0.01 etc.
...等 - 基本上加上最小精度值的一半以获得舍入效果。
然后对结果运行正则表达式提取。上述内容可能会为此完成。
这是我确定的正则表达式模式 - 这不是最强大的,但可以处理已知基本浮点格式的数字:
+ for 0.1 precision use (-?\d*\.?\d?)
+ for 0.01 precision use (-?\d*\.?\d?\d?)
+ for 0.001 precision use (-?\d*\.?\d?\d?\d?)
然后它都舍入并截断。