请改用锚点:
aa=re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",ip)
这些确保字符串的开头和结尾在正则表达式的开头和结尾匹配。(嗯,从技术上讲,您不需要起始^
锚,因为它在.match()
方法中是隐式的)。
然后,在尝试访问其结果之前,检查正则表达式是否确实匹配:
if aa:
ip = aa.group()
当然,这不是验证IP地址的好方法(请查看gnibbler的答案以找到合适的方法)。但是,正则表达式可用于检测较大字符串中的IP地址:
ip_candidates = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", ip)
在这里,\b
单词边界锚确保每个段的数字不超过3。