python - 如何获得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 的价格car
,gun
那么结果是[10.6, 10.8-15.7]
如何使用正则表达式来获取它?
谢谢。
解决方案
您可以使用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]
推荐阅读
- javascript - 使用 RXJS 取消嵌套订阅
- c# - 使用 c# unity解码 GStreamer jpeg 流
- loops - 未定义的函数 A 有什么问题?(口齿不清)
- sql - 将 GROUP BY 结果存储在 Oracle PL/SQL 中的变量中
- javascript - 如何为每个表行循环相同的功能?
- javascript - scrollTop 按钮仅在第一次单击时起作用
- angular - 我们应该在某些 NgRx Effects 案例中使用 NEVER 吗?
- python - 如何计算要在 BitBake 中填充的文件大小?
- python - 何用 python-docx 读取单个表格单元格使用的列数(colspan)
- c - 如何垂直打印数据?