从Python的字符串列表中获取十进制数字/整数之前的所有值

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

我有一个字符串列表,我想将每个字符串分割为一个浮点数。如果字符串中没有浮点数,我想将其拆分为一个数字。它应该只拆分一次,并返回前后用逗号分隔的所有内容。

输入字符串:

['Naproxen  500  Active ingredient  Ph Eur',
 'Croscarmellose sodium  22.0 mg Disintegrant  Ph Eur',
 'Povidone K90  11.0   Binder 56 Ph Eur',
 'Water, purifieda,
 'Silica, colloidal anhydrous  2.62  Glidant  Ph Eur',
 'Water purified 49 Solvent  Ph Eur',
 'Magnesium stearate  1.38  Lubricant  Ph Eur']

预期输出:

['Naproxen',  '500',  'Active ingredient  Ph Eur',
 'Croscarmellose sodium',  '22.0 mg',  'Disintegrant  Ph Eur',
 'Povidone K90',  '11.0',  'Binder  Ph Eur',
 'Water, purifieda',
 'Silica, colloidal anhydrous',  '2.62',  'Glidant  Ph Eur',
 'Water purified', '49',  'Solvent  Ph Eur',
 'Magnesium stearate',  '1.38',  'Lubricant  Ph Eur']

我的代码:

for i in newresult:
        regex_float_part = re.split(r'\s+(\d+\.\d+)\s+', i, 1)
#        print(regex_float_part)
#        regex_float_part_n = [item for sublist in regex_float_part for item in sublist]
        if regex_float_part:
            all_extract.append(regex_float_part)
        else:
#            regex_integer = r'\s+(\d+(?:\\d+)?)\s+'
            regex_integer_part = re.split(r'\s+(\d+(?:\\d+)?)\s+', i, 1)
#            regex_integer_part_n = [item for sublist in regex_integer_part for item in sublist]


            all_extract.append(regex_integer_part)

问题出在这个输入字符串上:

'Water purified 49 Solvent  Ph Eur',

这不符合预期,是:

'Water purified', '49',  'Solvent  Ph Eur'

那是代码没有进入其他部分。一种观察是我的正则表达式的split函数正在创建列表列表,即regex_float_part和regex_integer_part是列表列表。谁能帮我解决我的代码未响应的字符串的问题

python regex list floating-point pattern-matching
1个回答
0
投票

您使用的正则表达式几乎是正确的,但您必须考虑到.和点后的数字可能不存在。可以这样实现:

\s+(\d+(?:\.\d+)?)\s+

不同之处在于,您可以通过在组之后的问号将\.\d+添加到可能不存在的非捕获组((?:xxxx))中:

© www.soinside.com 2019 - 2024. All rights reserved.