Created
May 14, 2024 15:52
-
-
Save naranjja/ec0c8feee2c5cd5ac9c4890122c52745 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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