我有一个字符串列表,我想将每个字符串分割为一个浮点数。如果字符串中没有浮点数,我想将其拆分为一个数字。它应该只拆分一次,并返回前后用逗号分隔的所有内容。
输入字符串:
['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是列表列表。谁能帮我解决我的代码未响应的字符串的问题
您使用的正则表达式几乎是正确的,但您必须考虑到.
和点后的数字可能不存在。可以这样实现:
\s+(\d+(?:\.\d+)?)\s+
不同之处在于,您可以通过在组之后的问号将\.\d+
添加到可能不存在的非捕获组((?:xxxx)
)中: