我在for循环中进行for循环。我循环遍历列表并查找包含正则表达式模式的特定字符串。一旦找到该线,我需要搜索以找到某个模式的下一行。我需要存储两行以便能够解析它们的时间。我创建了一个计数器来跟踪列表的索引号,因为外部for循环工作。我可以使用这样的结构来找到我需要的第二行吗?
index = 0
for lineString in summaryList:
match10secExp = re.search('taking 10 sec. exposure', lineString)
if match10secExp:
startPlate = lineString
for line in summaryList[index:index+10]:
matchExposure = re.search('taking \d\d\d sec. exposure', line)
if matchExposure:
endPlate = line
break
index = index + 1
代码运行,但我没有得到我正在寻找的结果。
感谢。
答案 0 :(得分:1)
matchExposure = re.search('taking \d\d\d sec. exposure', lineString)
应该是
matchExposure = re.search('taking \d\d\d sec. exposure', line)
答案 1 :(得分:1)
根据您的确切需要,您可以在列表中使用迭代器,或者使用itertools.tee中的两个作为mae。即,如果您想在第一个模式仅之后搜索第二个模式的行,则单个迭代器将执行:
theiter = iter(thelist)
for aline in theiter:
if re.search(somestart, aline):
for another in theiter:
if re.search(someend, another):
yield aline, another # or print, whatever
break
这将不从aline
到another
的结尾somestart
,someend
仅的搜索行。如果您需要为两个目的搜索它们,即保留theiter
本身完整的外部循环,那么tee
可以提供帮助:
for aline in theiter:
if re.search(somestart, aline):
_, anotheriter = itertools.tee(iter(thelist))
for another in anotheriter:
if re.search(someend, another):
yield aline, another # or print, whatever
break
这是文档提供的关于tee
的一般规则的例外情况:
tee()
进行拆分后,即可 不应使用原始可迭代 其他地方;否则,可迭代 如果没有发球台就可以进步 被通知的对象。
因为theiter
的推进和anotheriter
的推进发生在代码的不相交部分,并且anotheriter
总是在需要时重新重建(因此theiter
的推进在此期间不相关)。