2

我有一个巨大的字符串,并且我在该字符串中创建了一个名为“found”的所有匹配模式的列表。我还创建了一个名为“位置”的模式的所有位置列表。现在我想在一行中打印找到的模式及其相应的位置,用制表符分隔,但我被循环绊倒了。这是我最近的尝试:

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

您的代码假设只有一个匹配项。要查找并打印所有匹配项,使用该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 回答