Python正则表达式:用户输入多个搜索词

时间:2014-11-10 18:24:40

标签: python regex search user-input

我的代码假设是接受用户输入搜索术语,然后遍历tcp转储文件并按数据包查找该术语的每个实例。 src IP充当我输出中每个数据包的标头。

所以我遇到了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

2 个答案:

答案 0 :(得分:1)

这是因为您将文件对象作为迭代器打开,该迭代器在for循环的第一个过程中被消耗。

在第二次循环中,for line in fileIn将不会被评估,因为迭代器fileIn已被使用。

快速解决方法是:

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

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

for line in lines:

说完这些之后,你应该重写你的代码,使用正则表达式或运算符在一次传递中完成所有正则表达式匹配。

答案 1 :(得分:0)

您需要在for line in fileIn循环后“倒回”文件:

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