【问题标题】:Split a string in python on a floating point number, if no floating point number found, split it on a number [closed]在浮点数上拆分python中的字符串,如果找不到浮点数,则将其拆分为数字[关闭]
【发布时间】:2020-02-04 06:22:42
【问题描述】:

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

输入字符串:

['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',
 '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, purified',
 'Silica, colloidal anhydrous',  '2.62',  'Glidant  Ph Eur',
 'Magnesium stearate',  '1.38',  'Lubricant  Ph Eur']

【问题讨论】:

  • 'Povidone K90', '11.0', 'Binder Ph Eur', 根据您的描述,拆分似乎不正确
  • @CoderCharmander 重新阅读问题。这并不是要求对空格进行简单的拆分。

标签: python regex string split pattern-matching


【解决方案1】:

试试这个re.split 选项:

inp = 'Croscarmellose sodium  22.0 mg Disintegrant  Ph Eur'
parts = re.split(r'\s+(\d+(?:\.\d+)?)\s+', inp, 1)
print(parts)

打印出来:

['Croscarmellose sodium', '22.0', 'mg Disintegrant  Ph Eur']

这个想法是拆分这个正则表达式模式:

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

这匹配一个数字,带有可选的小数部分,被空格包围。请注意,我们在数字周围放置括号,因为我们不想在拆分中使用它。另请注意,re.split 的第三个参数设置为 1,这告诉 Python 只拆分一次。

【讨论】:

  • 非常感谢。但它在这种情况下不起作用Hypromellose 6 mPas 31.50 Film former Ph Eur。这里的预期输出是'Hypromellose 6 mPas', '31.50', 'Film former Ph Eur'。你能帮忙吗?基本上我想首先匹配浮点数,并且只有在整数上没有浮点值匹配时才匹配
  • 不,这种情况下的输出是['Hypromellose', '6', 'mPas 31.50 Film former Ph Eur']see the demo here
  • 我可以得到这个输出为'Hypromellose 6 mPas', '31.50', 'Film former Ph Eur'吗?也许将它放在 if else 条件中以首先匹配浮点数,如果未找到匹配整数?
  • 你能帮我用正则表达式只匹配浮点数和另一个正则表达式只匹配整数,以便我可以把它放在 ifelse 中并解决这个问题吗?
  • 你应该打开一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 2016-01-15
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多