我想从lis中的字符串中提取数字

2024-03-28 12:14:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单

 [['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


Tags: 字符串元素列表for数字cupbreadcrumbsoil
3条回答

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

>>> 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']]

您可以将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']]

使用-

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:])]。这是作为列表的第一个元素的第一个单词,后面是作为单个字符串连接的所有其他单词。你知道吗

希望这有帮助!你知道吗

相关问题 更多 >