首页 > 解决方案 > 如何获得2个关键字之间的数字?

问题描述

第一组关键词:

boy = [car, gun, football]

第二组关键词:

girl = [doll, clothes, dessert]

字符串是

string = 'car~ $10.6 USD, doll>15.8-25.3 USD, gun10.8-15.7 USD'

如何从中找到第一组的号码而不是第二组的号码string

比如我想得到第一组关键词 and 的价格cargun那么结果是[10.6, 10.8-15.7]

如何使用正则表达式来获取它?

谢谢。

标签: pythonregex

解决方案


您可以使用re.findall来定位值,然后形成一个字典:

import re 
string = 'car: $10.6 USD, doll: 15.8-25.3 USD, gun: 10.8-15.7 USD'
d = re.findall('\w+(?=:)|(?<=:\s)[^,]+', string)
new_d = {d[i]:d[i+1] for i in range(0, len(d), 2)}
boy = ['car', 'gun', 'football']
result = [new_d[i] for i in boy if i in new_d]

输出:

['$10.6 USD', '10.8-15.7 USD']

编辑:您可以str.split使用re.sub

new_result = [list(map(float, re.sub('\$|\sUSD', '', i).split('-'))) for i in result]

输出:

[[10.6], [10.8, 15.7]]

编辑:更新字符串:

string = 'car~ $10.6 USD, doll>15.8-25.3 USD, gun10.8-15.7 USD'
_d = dict(re.findall('^[a-zA-Z]+|[\d\.\-]+', i) for i in string.split(', '))
d = {a:list(map(float, b.split('-'))) for a, b in _d.items()}
boy = ['car', 'gun', 'football']
result = [new_d[i] for i in boy if i in new_d]

推荐阅读