我想得到点后除 0 之外的第一个数字。 如果点后有非 0 的数字,则按 2 位数字处理。所以它一定很敏感。我如何使用正则表达式或Python数学库来做到这一点? 这是例子
"0.00820289933" => "0.008"
"0.00000025252" => "0.0000002"
"0.858282815215" => "0.85"
"0.075787842545" => "0.07"
def format_adjusted_value(value):
str_value = str(value)
if '.' in str_value:
match = re.match(r'(\d*\.\d*?[1-9])0*$', str_value)
if match:
formatted_value = match.group(1)
else:
match = re.match(r'(\d*\.\d*?[0-9])0*$', str_value)
formatted_value = match.group(1) if match else str_value
else:
formatted_value = str_value
return formatted_value
使用简单的怎么样:
import re
def format_adjusted_value(value):
m = re.search(r'\d+\.(?:[^0]|0+)[^0]', str(value))
if m:
return m.group(0)
输出:
0.00820289933: 0.008
0.00000025252: 0.0000002
0.858282815215: 0.85
0.075787842545: 0.07
像大多数正则表达式问题一样,只需用语言表达即可。匹配“零点,后跟一堆 0 和一个数字,或者 1-9 和一个数字:
import re
data = [
"0.00820289933",
"0.00000025252",
"0.858282815215",
"0.075787842545"
]
digs = re.compile(r"0\.((0+\d)|([1-9]\d))")
for p in data:
print(digs.match(p))
输出:
<re.Match object; span=(0, 5), match='0.008'>
<re.Match object; span=(0, 9), match='0.0000002'>
<re.Match object; span=(0, 4), match='0.85'>
<re.Match object; span=(0, 4), match='0.07'>