1

for ループ内に for ループを作成しています。リストをループして、正規表現パターンを含む特定の文字列を見つけています。行が見つかったら、特定のパターンの次の行を見つけるために検索する必要があります。両方の行を保存して、それらの時間を解析できるようにする必要があります。外側の for ループが機能するときに、リストのインデックス番号を追跡するカウンターを作成しました。このような構造を使用して、必要な 2 番目の行を見つけることができますか?

 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

コードは実行されますが、探している結果が得られません。

ありがとう。

4

2 に答える 2

1
matchExposure = re.search('taking \d\d\d sec. exposure', lineString)

おそらくあるはずです

matchExposure = re.search('taking \d\d\d sec. exposure', line)
于 2010-06-23T21:00:14.650 に答える
1

正確なニーズに応じて、リストでイテレータを使用するか、そのうちの 2 つをitertools.teeの mae として使用できます。つまり、最初のパターンに続く行を 2 番目のパターンのみで検索する場合は、単一のイテレータで実行できます。

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

これは、 から末尾までの行を検索せずのみを検索します。両方の目的でそれらを検索する必要がある場合、つまり、外側のループのためにそのままにしておく場合は、次の場所が役立ちます。alineanothersomestartsomeendtheitertee

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()分割すると、元の iterable を他の場所で使用してはなりません。そうしないと、tee オブジェクトに通知されずに iterable が進行する可能性があります。

の進行と の進行はコードのバラバラな部分で発生し、theiter必要に応じて常に新たに再構築されるためです (その間の の進行は関係ありません)。anotheriteranotheritertheiter

于 2010-06-23T21:00:43.300 に答える