Basado en su comentario anterior, voy a reinterpretar la pregunta, en lugar de hacer una expresión regular que coincida con ellos, crearemos una función que los emparejará, y aplicaremos esa función para filtrar una lista de nombres de dominio para incluir solo dominios de primera clase, por ej. google.com, amazon.co.uk.
Primero, necesitaremos una lista de TLD. Como Greg mencionó, la lista de sufijos públicos es un gran lugar para comenzar. Supongamos que ha analizado la lista en una matriz de Python llamada suffixes
. Si esto no es algo con lo que se sienta cómodo, comente y pueda agregar algún código que lo haga.
suffixes = parse_suffix_list("suffix_list.txt")
Ahora vamos a necesitar código que identifica si un determinado nombre de dominio coincide con el patrón algunos-name.suffix:
def is_domain(d):
for suffix in suffixes:
if d.endswith(suffix):
# Get the base domain name without suffix
base_name = d[0:-(suffix.length + 1)]
# If it contains '.', it's a subdomain.
if not base_name.contains('.'):
return true
# If we get here, no matches were found
return false
¿Necesita explícitamente una expresión regular, o sería una función para hacerlo basta ? – Benson
Esto se convertiría en una expresión regular bastante grande, ya que necesitaría tratar todos los ccSLD como casos especiales, y hay muchos (y me refiero a MUCHO) de ccSLD. ¡Brasil tiene 66 de ellos! – You
@Benson, una función funcionaría, siempre que pueda encontrar domain.cctld en una larga lista de dominios – Tom