我想从带有字符串的列表中提取数字

时间:2019-09-26 09:40:21

标签: python regex python-3.x list

我有一个包含字符串的列表:list = ['string', 'string', 'string', ...]
这些字符串就像:'NumberDescription 33.3'
我只想提取没有'NumberDescription' part.

的数字

我已经尝试过使用正则表达式,并使用re.match进行过滤。 但这会导致一个空列表。

dat_re = re.compile(r'\d+.\d')  
dat_list = list(filter(dat_re.match, list))

正如我所说,我只希望列表中的数字,并且在最后一步中,我想将列表中的元素转换为浮点数字。

3 个答案:

答案 0 :(得分:1)

这里有几点:

  1. re.match only searches for the match at the string start开始使用re.search
  2. 转义点special regex metacharacter
  3. 仅使用filter(...)过滤列表,而不提取值。
  4. 如果您打算首次发现digit+.digit+,可以使用\d+\.\d+之类的正则表达式
  5. 如果您的商品全部为string number格式,请使用s.split()[-1]获取编号,无需正则表达式

使用

dat_list = [float(dat_re.search(x).group()) for x in l if dat_re.search(x)]

或者,如果格式是固定的

dat_list = [float(x.split()[-1]) for x in l]

请参见Python demo

import re
l = ['string 23.3', 'NumberDescription 33.35']
dat_re = re.compile(r'\d+\.\d+')
dat_list = [float(dat_re.search(x).group()) for x in l if dat_re.search(x)]
print(dat_list)
# => [23.3, 33.35]
print([float(x.split()[-1]) for x in l])
# => [23.3, 33.35]

答案 1 :(得分:1)

list_strings=['1','2','3']
for i in list_strings:
    num_list.append(int(i))
or

list_num = [int(x) for x in list_strings]

一次检查此示例代码。

答案 2 :(得分:1)

要直接从列表中提取浮点值:

import re
l = ['string 23.3', 'string 33.35', 'string 44.55']
dat_list = list(float(match.group(1)) for match in map(re.compile('(\d+\.\d+)').search, l))
print(dat_list)

输出:

 [23.3, 33.35, 44.55]