我有一行被分割:
['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)
答案 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
从仍然打开的文件句柄中进行下一个匹配,直到使用完输入文件为止。