很抱歉,如果这个问题已经得到回答-我尝试查找它,但是也许我的搜索字词(与我的标题一样)是错误的。
假设我有一个这样的字符串,但我无法控制它:
astr = "A 5.02654824574 (14.710000000000008, -19.989999999999995, -0.8) <-> s[10]: A 5.02654824574 (-29.11999999999999, 52.78, -0.8)"
我想处理该字符串,以便以任意数量的浮点精度显示其中的浮点数-例如3个小数。由于这可以在字符串级别进行,所以我不希望该过程考虑到正确的舍入-只是为了除去小数点字符串字符。
根据Python: Extract multiple float numbers from string,我知道我可以做到:
import re
p = re.compile(r'\d+\.\d+')
for i in p.findall(astr): print i
...打印:
5.02654824574
14.710000000000008
19.989999999999995
0.8
5.02654824574
29.11999999999999
52.78
0.8
....但是,我迷路了在搜索和替换中需要进行哪些正则表达式捕获,所以-例如,对于n_float_precision_decimals = 4
-我会将此字符串作为输出(带有上面的字符串作为输入):
"A 5.0265 (14.7100, -19.9899, -0.8) <-> s[10]: A 5.0265 (-29.1199, 52.78, -0.8)"
因此,基本上,正则表达式将考虑到,如果已经存在较小数目的小数,则根本不会截断小数。
是否可以通过单个re.sub
操作来完成,而不必如上所述编写显式的for
循环并手动构造输出字符串?
答案 0 :(得分:0)
知道了-多亏Reduce float precision using RegExp in swift(仅在我输入完整个问题后(在此期间,我得到的与该特定问题无关的所有结果):)
才在SO建议中弹出) :
>>> pat=re.compile(r'(\d+\.\d{2})\d+')
>>> pat.sub(r'\1', astr)
'A 5.02 (14.71, -19.98, -0.8) <-> s[10]: A 5.02 (-29.11, 52.78, -0.8)'
...或:
>>> nfloatprec=4
>>> pat=re.compile(r'(\d+\.\d{'+str(nfloatprec)+'})\d+')
>>> pat.sub(r'\1', astr)
'A 5.0265 (14.7100, -19.9899, -0.8) <-> s[10]: A 5.0265 (-29.1199, 52.78, -0.8)'