re.findall(str(list[0]) 正在搜索列表项中的第一个字符,而不是完整的字符串



我正在创建一个程序来查找日志文件中的所有IPv4地址,并显示这些地址出现的次数。我正在使用Python的re库。在我尝试遍历地址列表以计算它们出现的次数之前,它工作得很好。当我从列表中调用一个项目并将其转换为字符串时,re.findall(( 将只搜索该字符串中的第一个字符,而不是字符串本身。

当我传入一个完整的字符串时,它工作得很好,当我将列表中的项目打印为字符串时,它还显示了完整的地址。我也尝试在代码的不同位置使用 str(( 方法,这似乎并不能解决问题。此外,re.findall(( 方法需要一个字符串。

创建的字符串如下所示: [['111.222.333.124']

, ['111.222.333.123'], ['111.222.333.124'], ['111.222.333.123'], ['111.222.333.123'], ['111.222.333.123'], ['111.222.333.123'], ['111.222.333.124'], ['111.222.333.125'], ['111.222.333.125'], ['11.222.333.123'], ['111.222.333.126']]
def findDuplicates(list):
string_list = str(list)
target = list[0]
x = len(re.findall(str(target) , string_list))
print(target, " occurs ", x, "times!")

['111.222.333.124'] 出现 217 次!

此地址在日志文件中出现 3 次。 数字 1 出现 217 次。

好的快速问题:如果您要在列表中查找项目,其中项目与您要查找的对象相同,为什么不比较整个项目? 一般来说,re是保留的,当你试图找到部分匹配时,但这似乎不是你在这里做的事情。 像这样:

counter = 0
for i in list:
if i == target:
counter+=1
print(counter)

我敢打赌,当你str(list(得到'111.222.333.124'时,发生在你身上的事情是,然后当你list[0]时,你会得到1,所以1被喂入比赛的re.findall。 我会检查一下。

最新更新