Skip to content

Instantly share code, notes, and snippets.

@naranjja
Created May 14, 2024 15:52
Show Gist options
  • Save naranjja/ec0c8feee2c5cd5ac9c4890122c52745 to your computer and use it in GitHub Desktop.
Save naranjja/ec0c8feee2c5cd5ac9c4890122c52745 to your computer and use it in GitHub Desktop.
import re
# necesitamos un diccionaro con los
# posibles country codes que no son estándar
# pueden venir de 1-3 dígitos
# y puede haber ambigüedad (eg. 50 vs 501)
# algunos comparten código de país
# (eg. estados unidos y puerto rico pueden ser +1)
# si se desea distinguir entre países que
# comparten código, hay que ver también el código
# de ciudad (eg. +13013200563 -> +1, 301 -> EEUU)
country_codes = {
"1": "ESTADOS_UNIDOS",
"51": "PERU",
"591": "BOLIVIA",
"55": "BRAZIL",
"56": "CHILE",
"57": "COLOMBIA",
"506": "COSTA_RICA",
"593": "ECUADOR",
"503": "EL_SALVADOR",
"502": "GUATEMALA",
"52": "MEXICO",
"507": "PANAMA",
"787": "PUERTO_RICO",
"939": "PUERTO_RICO",
"809": "REPUBLICA_DOMINICANA",
"829": "REPUBLICA_DOMINICANA",
"849": "REPUBLICA_DOMINICANA",
"58": "VENEZUELA",
}
# crear expresión regular para estos códigos de países
# de manera dinámica según el diccionario
pattern = "|".join(map(re.escape, country_codes.keys()))
pattern = r"\b(" + pattern + r")(\d+)\b"
# se ve así
# pattern = \b(1|51|591|55|56|57|506|593|503|502|52|507|787|939|809|829|849|58)(\d+)\b
# busca primero que esté uno de los códigos de países
# y luego el resto de números a su derecha
# ignora slashes u otros caracteres, entonces sirve para outgoing e incoming
def extraer_pais_numero(text: str):
# busca el patrón en el texto
matches = re.findall(pattern, text)
# retorna el país y el número de encontró
results = [{
"country": country_codes[m[0]],
"country_code": m[0],
"number": m[1],
} for m in matches]
if len(results) > 0:
print(results[0])
else:
print("No se encontró")
extraer_pais_numero("13057907560") # outgoing
extraer_pais_numero("60ca637c2bd61269d8f4e857/ivrinst-7974dcd6-f1c1-5b7c-b5af-3691a5f4bb5/573118406143") # incoming
# se ve así
# {'country': 'ESTADOS_UNIDOS', 'country_code': '1', 'number': '3057907560'}
# {'country': 'COLOMBIA', 'country_code': '57', 'number': '3118406143'}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment