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

时间:2018-02-14 10:36:29

标签: python list parsing

我有一个列表,如

 [['2 Cups Fresh breadcrumbs'], ['1/3 Cup Parmesan cheese, grated'], ['For frying  Vegetable Oil']]

我想从列表元素中获取数字,例如在获取列表之后应该看起来像这样

 [['2', 'Cups Fresh breadcrumbs'], ['1/3', 'Cup Parmesan cheese, grated'], ['','For frying  Vegetable Oil']]

我试图从列表中的字符串中解析数字。

语言 - python

3 个答案:

答案 0 :(得分:5)

您可以使用re模块使用此模式:

data = [['2 Cups Fresh breadcrumbs'], ['1/3 Cup Parmesan cheese, grated'], ['For frying  Vegetable Oil']]
pattern = '([0-9].*?)?\s(.*)'
[[item for found in re.findall(pattern, i[0]) for item in found] for i in data]
#[['2', 'Cups Fresh breadcrumbs'], ['1/3', 'Cup Parmesan cheese, grated'], ['','For frying  Vegetable Oil']]

答案 1 :(得分:1)

一种简单的方法是展平列表并检查每个元素是否以数字

开头
>>> import itertools 

>>> l =  [['2 Cups Fresh breadcrumbs'], ['1/3 Cup Parmesan cheese, grated'], ['For frying  Vegetable Oil']]
>>> [a.split(maxsplit=1) if a[0].isdigit() else ['', a]for a in itertools.chain(*l)]
>>> [['2', 'Cups Fresh breadcrumbs'], ['1/3', 'Cup Parmesan cheese, grated'], ['', 'For frying  Vegetable Oil']]

答案 2 :(得分:0)

使用 -

import re
a=[['2 Cups Fresh breadcrumbs'], ['1/3 Cup Parmesan cheese, grated'], ['For frying  Vegetable Oil']]
pattern = re.compile("^([0-9]+)+$")

b=[]
for words in a:
    w_lst = words[0].split()
    b.append([ [w_lst[0], ' '.join(w_lst[1:]) ] if re.search(r'\d', w_lst[0]) else words for word in words][0])
print(b)

<强>输出

[['2', 'Cups Fresh breadcrumbs'], ['1/3', 'Cup Parmesan cheese, grated'], ['For frying  Vegetable Oil']]

<强>解释

a是您的原始列表。 b将是最终输出。

w_lst = words[0].split()获取嵌套列表中的每个字符串,并将字符串拆分为单词列表。

re.search(r'\d', w_lst[0])在您的第一个单词中搜索数字。可以修改此正则表达式以适应更严格的规则来检测字符串中的数字。如果找到则返回True

在if-else条件下使用它,如果此条件不满足,则输出原始字符串。

如果是,则输出[w_lst[0], ' '.join(w_lst[1:])]。这是第一个单词作为列表的第一个单元,后面跟着所有其他单词作为单个字符串连接起来。

希望这有帮助!