Мне нужна ваша помощь с заданным выражением регулярного выражения для получения IP-адреса из имен DNS
Я написал небольшой скрипт:
#!/usr/bin/env python
import re
domains = [
"us-west-2.elasticmapreduce.amazonaws.com",
"ip-10-27-87-173",
"ip-10-27-91-145.us-west-2.compute.internal",
"ip-10-27-90-170.us-west-2.compute.internal.us-west-2.compute.internal",
"ec2-54-82-117-121",
"ec2-54-82-117-121.compute-1.amazonaws.com",
"ec2-54-82-117-121.compute-1.amazonaws.com.us-west-2.compute.internal",
"ip-10-27-102-175.us-west-2.compute.internal.us-west-2.compute.internal",
"ip-10-27-180-213.us-west-2.compute.internal",
"ip-10-27-107-136.us-west-2.compute.internal.us-west-2.compute.internal",
"ip-10-27-209-104.us-east-1.compute.internal",
"ip-10-27-209-104.us-east-1.compute.internal.us-east-1.compute.internal",
"ip-10-27-209-104.us-east-1.compute.internal.ec2.internal",
"ip-10-27-112-164.ec2.internal"
]
regexp1 = "(ip|ec2)-((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\-){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))($|(?:ec2|[^.]+\.compute)\.internal\.$)?"
print("REGEXP: {0}".format(regexp1))
for domain in domains:
result = re.match(regexp1, domain)
if result:
print("{0:>8} domain: {1:<90} matched with regexp, groups: {2:>30}".format("TRUE", domain, result.groups()))
else:
print("{0:>8} domain: {1:<90} not matched with regexp".format("FALSE", domain))
, но результат этого скрипта:
FALSE domain: ip-10-27-209-104.us-east-1.compute.internal not matched with regexp
FALSE domain: ip-10-27-209-104.us-east-1.compute.internal.us-east-1.compute.internal not matched with regexp
FALSE domain: ip-10-27-209-104.us-east-1.compute.internal.ec2.internal not matched with regexp
выглядит не очень хорошо, я обнаружил, что результат не так хорош для меня:
проблема в строке:
ip-10-27-209-104.us-east-1.compute.internal
, если я заменил 209 на значение меньше 200, и все работалоЧто ж. Что-то не так с моим выражением регулярного выражения
Не могли бы вы помочь найти причину этого поведения и оптимизировать выражение Идея выбрать IP-адрес из имени DNS.
Спасибо