使用正则表达式处理带单位的数字字符串

使用正则表达式处理带有不同单位的数字字符串,并提取数字值和单位。
def filter_non_zero_items(input_list):
    result = []
    for a in input_list:
        not_zero = False
        for a_item in a:
            if a_item != '0':
                not_zero = True
                break
        if not_zero:
            result.append(a)
    return result
list_a = ['104066666', '', '00', '0000', '', '', '']
print(filter_non_zero_items(list_a))

import re

num_unit_str_list = [
    '104066666.00 PC',
    '30099999.00 SH',
    '2155555.00 SH',
    '3434.00 SH',
    '21999995.00 SH',
    '1.066650 SH',
    '4 X 2500.000 KG',
    '20 X 5000.000 KG',
    '10 X 2500 吨',
    '1500888999 L',
    '99666',
    '2 X 1.11 kg'
]
for s1 in num_unit_str_list:
    pattern = r'[1-9]\d*\0.\d|\d*|0.\d*[1-9]\d*'
    re_res = re.findall(pattern, s1)
    obj = [i for i in re_res if i]
    obj = filter_non_zero_items(obj)
    res = 0
    uom = ''
    if s1.split(' ') and not re.findall(r'\d+', s1.split(' ')[-1]):
        uom = s1.split(' ')[-1]
    else:
        uom = '无单位'
    if len(obj) == 1:
        res = float(obj[0])
    elif len(obj) == 2:
        res = float(f"{obj[0]}") * float(f"{obj[1]}")
    elif len(obj) == 3:
        res = float(f"{obj[0]}") * float(f"{obj[1]}.{obj[2]}")
    print(s1, res, uom, len(obj))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值