Voy a hacer coincidir dos casos: 123456-78-9 o 123456789. Mi objetivo es recuperar 123456789 de cualquier caso, es decir, excluir el '-' del primer caso, no es necesario mencionar que el segundo caso es bastante sencillo .
Intenté usar una expresión regular como r"\b(\d+(?:-)?\d+(?:-)?\d)\b"
, pero aún me devuelve '123456-78-9'.
¿Cuál es la expresión regular correcta que debo usar? Aunque sé hacerlo en dos pasos: 1) obtener tres partes de dígitos mediante expresiones regulares 2) usar otra línea para concatenarlos, pero aún prefiero una expresión regular para que el código sea más elegante.
Gracias por cualquier consejo!
3 respuestas
Puede colocar las partes numéricas en los grupos de captura y luego reemplazar toda la coincidencia con solo los grupos capturados.
Intenta algo como:
\b(\d+)-?(\d+)-?(\d)\b
..y reemplazar con:
\1\2\3
Tenga en cuenta que los dos grupos sin captura que está utilizando son redundantes. (?:-)?
= -?
.
demostración de expresiones regulares.
Ejemplo de Python:
import re
regex = r"\b(\d+)-?(\d+)-?(\d)\b"
test_str = ("123456-78-9\n"
"123456789")
subst = "\\1\\2\\3"
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
print (result)
Salida:
123456789
123456789
Puedes usar r'(\d{6})(-?)(\d{2})\2(\d)'
Luego, únase a los grupos 1, 3 y 4, o reemplace usando "\\1\\3\\4"
Solo coincidirá con estas dos entradas:
123456-78-9 o 123456789
Depende de usted ponerle condiciones de contorno si es necesario.
https://regex101.com/r/ceB10E/1
Lo más fácil de hacer aquí sería usar primero re.sub
para eliminar todos los caracteres que no sean dígitos de la entrada. Luego, use una comparación de igualdad para verificar la entrada:
inp = "123456-78-9"
if re.sub(r'\D', '', inp) == '123456789':
print("MATCH")
Editar: si entendí mal su problema, y en su lugar las entradas podrían ser cualquier cosa, y solo desea hacer coincidir los dos formatos dados, use una alternancia:
\b(?:\d{6}-\d{2}-\d|\d{9})\b
Guión:
inp = "123456-78-9"
if re.search(r'\b(?:\d{6}-\d{2}-\d|\d{9})\b', inp):
print("MATCH")
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.