Я делаю для цикла в для цикла. Я - цикличное выполнение через список и нахождение определенной строки, которая содержит образец регулярного выражения. После того как я нахожу строку, я должен искать для нахождения следующей строки определенного шаблона. Я должен сохранить обе строки, чтобы смочь проанализировать время для них. Я создал в противоречии с, отслеживают индекс списка как внешнее для работ цикла. Я могу использовать конструкцию как это для нахождения второй строки, в которой я нуждаюсь?
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
Выполнения кода, но я не получаю результат, который я ищу.
Спасибо.
В зависимости от ваших конкретных потребностей вы можете просто использовать итератор в списке или два из них, как mae от itertools.tee . То есть, если вы хотите искать строки, следующие за первым шаблоном , только для второго шаблона, будет достаточно одного итератора:
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
до концовки другой
для 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
всегда перестраивается заново, когда это необходимо (так что продвижение of theiter
пока не имеет значения).
matchExposure = re.search('taking \d\d\d sec. exposure', lineString)
, вероятно, должно быть
matchExposure = re.search('taking \d\d\d sec. exposure', line)