所以我有一个清单:
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']
答案 0 :(得分:4)
您可以在此处使用正则表达式:
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']