• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

244
Vistas
expresión regular para encontrar un par de dígitos adyacentes con diferentes dígitos alrededor de ellos

Soy un principiante en expresiones regulares y estoy tratando de hacer una expresión para encontrar si hay dos dígitos iguales uno al lado del otro, y el dígito detrás y delante del par es diferente.

Por ejemplo,

123456678 debe coincidir ya que hay un doble 6,

1234566678 no debe coincidir ya que no hay ningún doble con diferentes números circundantes. 12334566 debe coincidir porque hay dos 3.

Hasta ahora tengo esto que funciona solo con 1, y siempre que el doble no esté al principio o al final de la cadena, sin embargo, puedo solucionarlo agregando una letra al principio y al final.

 ^.*([^1]11[^1]).*$

Sé que puedo usar [0-9] en lugar de los 1, pero el problema es que todos tengan el mismo dígito.

¡Gracias!

over 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Con expresiones regulares, es mucho más conveniente usar un módulo de expresiones regex de PyPi con el patrón basado en (*SKIP)(*FAIL) :

 import regex rx = r'(\d)\1{2,}(*SKIP)(*F)|(\d)\2' l = ["123456678", "1234566678"] for s in l: print(s, bool(regex.search(rx, s)) )

Vea la demostración de Python . Producción:

 123456678 True 1234566678 False

Detalles de expresiones regulares

  • (\d)\1{2,}(*SKIP)(*F) - un dígito y luego dos o más ocurrencias del mismo dígito
  • | - o
  • (\d)\2 - un dígito y luego el mismo dígito.

El punto es hacer coincidir todos los fragmentos de 3 o más dígitos idénticos y omitirlos, y luego hacer coincidir un fragmento de dos dígitos idénticos.

Vea la demostración de expresiones regulares .

over 3 years ago · Santiago Trujillo Denunciar

0

También puede utilizar una forma sencilla.

 import re l=["123456678", "1234566678", "12334566 "] for i in l: matches = re.findall(r"((.)\2+)", i) if any(len(x[0])!=2 for x in matches): print "{}-->{}".format(i, False) else: print "{}-->{}".format(i, True)

Puede personalizar esto según sus reglas.

Producción:

 123456678-->True 1234566678-->False 12334566 -->True
over 3 years ago · Santiago Trujillo Denunciar

0

Inspirado por la respuesta o Wiktor Stribiżew, otra variación de usar una alternancia con re es comprobar la existencia del grupo de captura que contiene una coincidencia positiva para 2 de los mismos dígitos que no están rodeados por el mismo dígito.

En este caso, compruebe el grupo 3.

 ((\d)\2{2,})|\d(\d)\3(?!\3)\d

Demostración de expresiones regulares | demostración de Python

  • ( Grupo de captura 1
    • (\d)\2{2,} Capture el grupo 2 , haga coincidir 1 dígito y repita ese mismo dígito 2+ veces
  • ) Cerrar grupo
  • | O
  • \d(\d) Coincide con un dígito, captura un dígito en el grupo 3
  • \3(?!\3)\d Coincide con el mismo dígito que en el grupo 3. Coincide con el 4º dígito, pero no debe ser el mismo que el dígito del grupo 3

Por ejemplo

 import re pattern = r"((\d)\2{2,})|\d(\d)\3(?!\3)\d" strings = ["123456678", "12334566", "12345654554888", "1221", "1234566678", "1222", "2221", "66", "122", "221", "111"] for s in strings: match = re.search(pattern, s) if match and match.group(3): print ("Match: " + match.string) else: print ("No match: " + s)

Producción

 Match: 123456678 Match: 12334566 Match: 12345654554888 Match: 1221 No match: 1234566678 No match: 1222 No match: 2221 No match: 66 No match: 122 No match: 221 No match: 111

Si, por ejemplo, solo 2 o 3 dígitos también está bien para hacer coincidir, puede verificar el grupo 2

 (\d)\1{2,}|(\d)\2

demostración de Python

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda