Python 我想从列表中的字符串中提取数字
我有一个列表,比如Python 我想从列表中的字符串中提取数字,python,list,parsing,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']]
[['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您可以将
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']]
您可以将
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 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']]
一个简单的方法是将列表展平,并检查每个元素是否以数字开头
>>> 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', '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条件中使用,如果该条件不满足,则输出原始字符串
如果是,则输出''.join(w_lst[1:])]。这将第一个单词作为列表的第一个元素,然后是作为单个字符串连接回来的所有其他单词
希望这有帮助 使用-
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条件中使用,如果该条件不满足,则输出原始字符串
如果是,则输出''.join(w_lst[1:])]。这将第一个单词作为列表的第一个元素,然后是作为单个字符串连接回来的所有其他单词
希望这有帮助 数字总是在开头吗?是的总是@bro grammer但分数也是@bro grammer预期的数字格式是什么?显然,数据来自配方,所以我认为没有像
3.7e-10
这样的科学符号。但是3-5个鸡蛋
或0.5升
或4(6盎司)
或2 1/2杯
?啊,一个没有尝试的家庭作业问题。请阅读。数字总是在开头吗?是的总是@bro grammer但分数也是@bro grammer预期的数字格式是什么?显然,数据来自配方,所以我认为没有像3.7e-10
这样的科学符号。但是3-5个鸡蛋
或0.5升
或4(6盎司)
或2 1/2杯
?啊,一个没有尝试的家庭作业问题。请阅读。您在第二个模式中有一个拼写错误
@FHTMitchell谢谢兄弟!你在第二个模式中有一个输入错误
@FHTMitchell谢谢兄弟!