Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想从列表中的字符串中提取数字_Python_List_Parsing - Fatal编程技术网

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谢谢兄弟!