我有一些像这样的原始数据:
Dear John Buy 1 of Coke, cost 10 dollars
Ivan Buy 20 of Milk
Dear Tina Buy 10 of Coke, cost 100 dollars
Mary Buy 5 of Milk
Run Code Online (Sandbox Code Playgroud)
数据规则是:
不是每个人都会从"亲爱的"开始,而如果有的话,它必须以成本结束
该项目可能并不总是正常的单词,可以无限制地写入(包括str,num等)
我想分组信息,我试图使用正则表达式.这就是我之前尝试过的:
for line in file.readlines():
match = re.search(r'\s+(?P<name>\w+)\D*(?P<num>\d+)\sof\s(?P<item>\w+)(?:\D+)(?P<costs>\d*)',line)
if match is not None:
print(match.groups())
file.close()
Run Code Online (Sandbox Code Playgroud)
现在输出看起来像:
('John', '1', 'Coke', '10')
('Ivan', '20', 'Milk', '')
('Tina', '10', 'Coke', '100')
('Mary', '5', 'Milk', '')
Run Code Online (Sandbox Code Playgroud)
上面显示的是我想要的.但是,如果item被一些奇怪的字符串替换A1~A10,有些输出会得到错误的信息:
('Ivan', '20', 'A1', '10')
('Mary', '5', 'A1', '10')
Run Code Online (Sandbox Code Playgroud)
我认为常量格式item field …
我只是学习python不久.我尽力表示我的数据看起来更好,就像以前一样.现在我有一些tuple数据类型,如下所示:
('John', '5', 'Coke')
('Mary', '1', 'Pie')
('Jack', '3', 'Milk')
('Mary', '2', 'Water')
('John', '3', 'Coke')
Run Code Online (Sandbox Code Playgroud)
我想知道每个人买了多少件物品.
假设不同的名字是不同的人.
那么我怎么能这样得到如下信息:
John: 8 Coke
Mary: 1 Pie
Mary: 2 Water
Jack: 3 Milk
Run Code Online (Sandbox Code Playgroud)
我不知道我现在怎么办.即使是愚蠢的人也无法想出任何方法.