如何去除 python 中的多个字符串

How to strip mutiple strings in python

我有列表(在文本文件中)

<info> app: Bid=B2,Bts=3,VAL=-90
<info> app: Bid=B2,Bts=4,VAL=-91
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=6,VAL=-91
<info> app: Bid=B2,Bts=7,VAL=-77
<info> app: Bid=B2,Bts=7,VAL=-82
<info> app: Bid=B2,Bts=8,VAL=-88

我希望我的输出是这样的,

[['B2', '3', '-90'], 
 ['B2', '4', '-91'],
 ['B2', '5', '-92'],
 ['B2', '5', '-92'],
 ['B2', '6', '-91'],
 ['B2', '7', '-77'],
 ['B2', '7', '-82'], 
 ['B2', '8', '-88']]

我试过这段代码,但我无法剥离我想要的东西。

with open('list.txt', 'r') as f:
    d = f.readlines()
    k = []
    for i in d:
        m=i.strip('<info> app:').strip('Bid=').strip('Bts=').strip('VAL=').strip('\n').split(',')
        k.append(m)
    print (k)

如何剥离我想要的东西??我错过了什么?? 提前致谢!

str.strip does not create structure; it merely removes the characters you indicate (by default, whitespace) from either end of a string. You're looking for something to parse your formatted fields, a notably more complex task. One possible example (using a regular expression) 可能是:

>>> a
['<info> app: Bid=B2,Bts=7,VAL=-77',
 '<info> app: Bid=B2,Bts=7,VAL=-82',
 '<info> app: Bid=B2,Bts=8,VAL=-88']
>>> import re
>>> fieldextractor=re.compile(' Bid=([^,]*),Bts=([^,]*),VAL=(.*)$')
>>> [fieldextractor.search(line).groups() for line in a]
[('B2', '7', '-77'), ('B2', '7', '-82'), ('B2', '8', '-88')]

拆分为 ,,然后拆分为 =,最后拆分为 =.

之后的内容
with open('list.txt', 'r') as f:
    d = f.readlines()
    k = []
    for i in d:
        k.append([j.split("=")[1] for j in i.split(",")])
    print (k)

这是您尝试编写的 for 循环版本:

src='''<info> app: Bid=B2,Bts=3,VAL=-90
<info> app: Bid=B2,Bts=4,VAL=-91
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=6,VAL=-91
<info> app: Bid=B2,Bts=7,VAL=-77
<info> app: Bid=B2,Bts=7,VAL=-82
<info> app: Bid=B2,Bts=8,VAL=-88'''

lines = src.split('\n')

k = []
for line in lines:
    bbv = line.split('app:')[1]  # split on 'app:' so that nothing in <info> interferes
    items = bbv.split(',')
    contents = [item.split('=')[1] for item in items]
    k.append(contents)

print(k)

输出:

[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]

具有re.search()功能:

import re

with open('list.txt') as f:
    result = []
    pat = re.compile(r'Bid=([^,]+),Bts=(\d+),VAL=([^\s]+)')
    for r in f:
        result.append(list(pat.search(r).groups()))

print(result)

输出:

[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]

https://docs.python.org/3/library/re.html#re.regex.search

您可以使用正则表达式打印所需的输出,

import re
with open('list.txt', 'r') as f:
    d = f.readlines()
    k = []
    for i in d:
        #m=i.strip('<info> app:').strip('Bid=').strip('Bts=').strip('VAL=').strip('\n').split(',')
        p = re.compile(r'Bid=(.*),Bts=(.*),VAL=(.*)')
        m = p.search(i)
        k.append([m.group(1), m.group(2), m.group(3)])
    print (k)

和输出,

root@localhost [ ~ ]# python t.py
[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]

这样做就可以了:

lines = [
    '<info> app: Bid=B2,Bts=3,VAL=-90',
    '<info> app: Bid=B2,Bts=4,VAL=-91'
]
res = [[part.split('=')[1] for part in line.split(',')] for line in lines]
print(res)

您可以使用这个正则表达式 - <info> app: Bid=(\w+),Bts=(\d+),VAL=(-\d+)

result = []
regex = r'<info> app: Bid=(\w+),Bts=(\d+),VAL=(-\d+)'

with open('list.txt', r) as file:
    for line in file.readlines():
        result += re.findall(regex, line)