python - 将列表元素的两个不同部分存储到另一个列表中
问题描述
所以我有一个清单:
myList = ['14:14:12.294 0,Type=Xover,Count=179,mcuTs=0x000DC827,fpgaTs=0xDB3C,lp-isD=1,lp-xoD=2344,alid=65535,cdr=65535,vhpn=65535,va=65535',
'14:14:12.295 0,Type=Bndry,Count=88,mcuTs=0x000DCB00,fpgaTs=0x9DEC,lp-isD=1,lp-xoD=2344,alid=65535,cdr=65535,vhpn=65535,va=65535',
'14:14:12.295 0,Type=IsXover,Count=136,mcuTs=0x000DC822,lp-isD=1,lp-xoD=2344,alid=65535,cdr=65535,vhpn=65535,va=65535']
我正在尝试存储'alid=*****'
并'vhpn=*****'
进入另一个名为“resultList”的列表。我有找到特定字符并将其拆分到下一个逗号的代码:
for string in myList:
mcuTimes1 = string[string.rfind('alid')+0:].split(',')[0]
mcuTime1.append(mcuTimes1)
但问题是因为'alid=*****'
并且'vhpn=*****'
在列表中不是连续的(一个接一个)我无法将它们放在一起(如果我尝试将它们与我的代码放在一起,它也将包括在内'cdr=*****'
)。我想知道是否有人知道如何获取列表的两个不同部分?
更新:
我不能使用正则表达式
我希望结果看起来像这样:
['alid=65535,vhpn=65535', 'alid=65535,vhpn=65535', 'alid=65535,vhpn=65535']
解决方案
您可以在此处使用正则表达式:
matches = [','.join(re.findall(r'(alid=\d+|vhpn=\d+)', i)) for i in myList]
输出:
['alid=65535,vhpn=65535', 'alid=65535,vhpn=65535', 'alid=65535,vhpn=65535']
正则表达式解释:
( // matching group 1
alid=\d+ // matches alid= followed by 1 or more digits
| // OR
vhpn=\d+ // matches vhpn= followed by 1 or more digits
) // end of matching group 1
不使用正则表达式的解决方案:
matches = []
for s in myList:
options = s.split(',')
found = []
for option in options:
if option[:option.find('=')] in {'alid', 'vhpn'}:
found.append(option)
matches.append(','.join(found))
print(matches)
输出:
['alid=65535,vhpn=65535', 'alid=65535,vhpn=65535', 'alid=65535,vhpn=65535']
推荐阅读
- excel-formula - 排序逻辑 - Excel 公式
- oracle - Spring Data JPA + Oracle Trigger 将 ID 增加两次
- asp.net - ASP.NET 从下拉列表选择中提交选定的值
- python - 如何更改 django-filter 过滤键?
- angular - 不支持函数调用。考虑用对导出函数的引用替换函数或 lambda,解析符号 Ng4MaskModule
- node.js - Node 中的批处理和排队 API 调用
- symfony - Symfony Worker - 消费消息 - EntityManager
- json - 将 DataFrame 写入 json 时排除列标题
- java - 无法在 Java 中获取 WebSphere 环境变量
- azure - 无法使用 Terraform 预配 Application Insight 资源