Python Regex:用户输入多个搜索词



我的代码要做的是接收用户输入的搜索词,然后遍历tcp转储文件,并通过数据包找到该词的每个实例。srcIP充当我输出中每个数据包的头。

所以我遇到了一个问题,当fileIn在第一个术语中迭代时,它似乎被删除了。因此,当程序查看第二个用户输入的搜索词时,它显然找不到任何内容。这是我所拥有的:

import re
searchTerms = []
fileIn = open('ascii_dump.txt', 'r')
while True:
    userTerm = input("Enter the search terms (End to stop): ")
    if userTerm == 'End':
        break
    else:
        searchTerms.append(userTerm)
ipPattern = re.compile(r'((?:d{1,3}.){3}d{1,3})')
x = 0
while True:
    print("Search Term is:", searchTerms[x])
    for line in fileIn:
        ipMatch = ipPattern.search(line)
        userPattern = re.compile(searchTerms[x])
        userMatch = userPattern.search(line)
        if ipMatch is not None:
            print(ipMatch.group())
        if userMatch is not None:
            print(userMatch.group())
    x += 1
    if x >= len(searchTerms):
       break

之所以会发生这种情况,是因为您将文件对象作为迭代器打开,该迭代器在第一个循环中通过for使用。

在循环的第二次期间,由于迭代器fileIn已经被消耗,因此不会对for line in fileIn进行求值。

一个快速的解决办法是这样做:

lines = open('ascii_dump.txt', 'r').readlines()

然后在for循环中,将for line in fileIn更改为:

for line in lines:

话虽如此,您应该重写代码,使用正则表达式或运算符在一次遍历中完成所有正则表达式匹配。

您需要在for line in fileIn循环后"倒带"文件:

...
fileIn.seek(0);
x += 1

相关内容

  • 没有找到相关文章

最新更新