如何用Python编写响应式正则表达式?

问题描述 投票:0回答:2

我想得到点后除 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
python regex-group regexp-replace
2个回答
0
投票

使用简单的怎么样:

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
投票

像大多数正则表达式问题一样,只需用语言表达即可。匹配“零点,后跟一堆 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'>
© www.soinside.com 2019 - 2024. All rights reserved.