我有一个列表,如
[['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
答案 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:])]
。这是第一个单词作为列表的第一个单元,后面跟着所有其他单词作为单个字符串连接起来。
希望这有帮助!