2

私は巨大な文字列を持っており、その文字列に一致するすべてのパターンのリストを「found」と呼びます。また、「場所」と呼ばれるパターンのすべての場所のリストを作成しました。ここで、見つかったパターンとそれに対応する場所をすべて1行にタブで区切って印刷したいのですが、ループにつまずいてしまいます。これが私の最新の試みです:

for i in found:
    print i + '\t' + locations['i']

しかし、明らかにエラーが発生します。場所やパターン、またはどちらか一方を印刷することはできますが、すべてを同じ行に表示する方法がよくわかりません。

編集:変数が見つかりました=文字列のリスト(文字列全体で見つかったパターン)および場所=re.finditerを使用して見つかったパターンの場所のリスト

ちなみに、zip()は私のニーズに完全に対応していました。ありがとう。

4

4 に答える 4

3

試してみてくださいzip()

for i,j in zip(found,locations):
    print "\t".join((i,str(j)))
于 2012-10-07T14:59:57.153 に答える
0

インデックスを介してリストにアクセスするには、整数を渡す必要があります。'i'は文字であり、で見つかると予想される整数ではありませんi。そうしてください:

for i in found:
    print i + '\t' + locations[i]
于 2012-10-07T14:59:28.557 に答える
0

多分enumerate()あなたが探しているものです:

for i, pattern in enumerate(found):
    print pattern + '\t' + locations[i]
于 2012-10-07T15:04:45.690 に答える
0

コードは、一致するものが1つだけであることを前提としています。すべての一致を見つけて印刷するには、reモジュールを使用すると効率的です。

import re

patterns = ['test', 'is', 'a', 'jest']
txt = 'This test is just a test, not a jest'

for p in patterns:
    pos =  [m.start() for m in re.finditer(p, txt)]
    if len(pos):
        print '\t'.join((p, str(pos)))

これは印刷します:

test    [5, 20]
is      [2, 10]
a       [18, 30]
jest    [32]
于 2012-10-07T15:19:38.747 に答える