如何分配第一场比赛和第二场比赛?

时间:2019-04-02 05:01:46

标签: python

我有一行被分割:

['Time      : tap/stap_tap2gpsb/SBMSGRSP/status/bit0: 19359560-19359561 step 1', 'Expect    : tap/stap_tap2gpsb/SBMSGRSP/status/bit0: XX', 'Acquired  : tap/stap_tap2gpsb/SBMSGRSP/status/bit0: 00', 'Time      : tap/stap_tap2gpsb/SBMSGRSP/status/bit1: 19359560-19359561 step 1', 'Expect    : tap/stap_tap2gpsb/SBMSGRSP/status/bit1: XX', 'Acquired  : tap/stap_tap2gpsb/SBMSGRSP/status/bit1: 00', '']

我想从以下行中抓取某些单词:

Acquired  : tap/stap_tap2gpsb/SBMSGRSP/status/bit0: 00
Acquired  : tap/stap_tap2gpsb/SBMSGRSP/status/bit1: 00

我正在使用re.search函数来匹配这些行,并且得到这些:

searchObj.group()  =  Acquired  : tap/stap_tap2gpsb/SBMSGRSP/status/bit0:0
searchObj.group(1) =  0
searchObj.group(2) =  0
status[0] ==  0
searchObj.group()  =  Acquired  : tap/stap_tap2gpsb/SBMSGRSP/status/bit1:0
searchObj.group(1) =  1
searchObj.group(2) =  0
status[1] ==  0

如何将第一场比赛和第二场比赛并在一起?因为我想做的是我需要status [0]和status [1]给出1来传递值,否则它将把这些值丢给失败值

下面是我的代码:

for line in lines:
    searchObj = re.search(r'^Acquired\s+:tap/stap_tap2gpsb/SBMSGRSP/status/bit(\d): (\d)', str(line))
    if searchObj:
        print "searchObj.group()  = ",  searchObj.group()
        print "searchObj.group(1) = ", searchObj.group(1)
        print "searchObj.group(2) = ", searchObj.group(2)
        print "status[" + searchObj.group(1) + "] ==  " + searchObj.group(2)

1 个答案:

答案 0 :(得分:0)

您可以轻松地将匹配项收集到对您有意义的任何数据结构中。例如:

match_lines = []
tap_tuples = []
for line in lines:
    searchObj = re.search(r'^Acquired\s+:tap/stap_tap2gpsb/SBMSGRSP/status/bit(\d): (\d)', str(line))
    if searchObj:
        match_lines.append(line)
        tap_tuples.append((searchObj.group(1), searchObj.group(2)))
print('\n'.join(match_lines))
print(';'.join(tap_tuples))

顺便说一句,如果要从文本文件中获取这些行,则可能需要一次一个地处理它们:

with open('file.txt') as handle:
     for line in handle:
        ...

如果这是在函数内部,则如果希望调用代码一个接一个地处理它们,则每次找到匹配项时可能会返回yield。对该函数的下一次调用将yield从仍然打开的文件句柄中进行下一个匹配,直到使用完输入文件为止。