将变量与正则表达式变量进行比较



我使用变量来保存这样的ip,但我需要验证它是否真的具有ip格式。ip 字段并不总是一个列表。 我有这个:

ip=["8.8.8.8","8.8.8.6"] # List or only one element
reg_ip = r'(?:d{1,3}.)+(?:d{1,3})'
filter_ip=re.findall(reg_ip,ip)

但答案如下

filter_ip= [u"8.8.8.8",u"8.8.8.6"]

因此不符合条件

if ip == reg_ip:

我应该怎么做?

import re
ip="8.8.8.8"
reg_ip = r'(?:d{1,3}.)+(?:d{1,3})'
filter_ip=re.findall(reg_ip,ip)
if ip in reg_ip:
pass

基本上,您正在检查是否有任何与正则表达式匹配项,因此.findall将返回匹配项数

import re
ip=["8.8.8.8","8.8.8.6"]
reg_ip = re.compile(r'(?:d{1,3}.)+(?:d{1,3})')
filter_ip = list(filter(reg_ip.search, ip))
if ip == filter_ip:
print "All ip Matched!"

如果您有单个ip要检查,建议您使用.search,因为它更快,并且不需要多个匹配项。

使用.search

ip="8.8.8.8"
reg_ip = r'(?:d{1,3}.)+(?:d{1,3})'
if re.search(reg_ip,ip):
print "Matched !"

最新更新