• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

220
Views
REGEX para hacer coincidir el número con dos y tres patrones numerados juntos

Tengo una matriz de 5 números, me gustaría hacer coincidir siempre que haya tres del mismo número y dos del mismo número diferente en la matriz, la ubicación no importa. Las secuencias numéricas pueden ser cualquier cadena aleatoria de 5 números entre 1 y 5. Los ejemplos de coincidencias serían: 33322 24422 52225 44111 54545 *básicamente cualquier agrupación de 2 y 3 de los mismos números debe coincidir.

Lo mejor que he encontrado hasta ahora: ^([0-9])\1{2}|([0-9])\1{1}$

No soy tan bueno con expresiones regulares, cualquier ayuda sería muy apreciada.

over 3 years ago · Santiago Trujillo
2 answers
Answer question

0

Puedes usar

 ^(?=[1-5]{5}$)(?=.*(\d)(?:.*\1){2})(?=.*(?!\1)(\d).*\2)\d+$ ^(?=.*(\d)(?:.*\1){2})(?=.*(?!\1)(\d).*\2)[1-5]{5}$

Vea la demostración de expresiones regulares .

Si desea permitir dígitos, reemplace [1-5] con \d .

Detalles :

  • ^ - comienzo de la cadena
  • (?=[1-5]{5}$) : debe haber cinco dígitos del 1 al 5 hasta el final de la cadena (esta búsqueda anticipada hace que las cadenas que no coinciden fallen más rápido)
  • (?=.*(\d)(?:.*\1){2}) - una anticipación positiva que requiere cero o más caracteres tantos como sea posible, seguido de un dígito (capturado en el Grupo 1) y luego dos secuencias de cero o más caracteres tantos como sea posible y el mismo dígito capturado en el Grupo 1 inmediatamente a la derecha de la ubicación actual
  • (?=.*(?!\1)(\d).*\2) - una anticipación positiva que requiere cero o más caracteres tantos como sea posible, seguido de un dígito (capturado en el Grupo 2) que no es igual al dígito en el Grupo 1, y luego cero o más caracteres tantos como sea posible y el mismo dígito capturado en el Grupo 2 inmediatamente a la derecha de la ubicación actual
  • \d+ - uno o más dígitos
  • $ - final de la cadena.
over 3 years ago · Santiago Trujillo Report

0

Hay muchas maneras de hacer eso. Una es hacer coincidir la siguiente expresión regular.

 ^(?=([1-5]).*\1)(?=.+(?!\1)([1-5]).*\2)(?:\1|\2){5}$

La idea es la siguiente.

  • use una anticipación positiva para hacer coincidir y guarde para capturar el primer dígito del grupo 1 y solicite que aparezca al menos dos veces;
  • use una búsqueda anticipada positiva para hacer coincidir y guardar para capturar el grupo 2 un dígito que sea diferente del dígito en el grupo de captura 1 y requiera que aparezca al menos dos veces;
  • haga coincidir una cadena de cinco caracteres que contenga solo los dígitos en los dos grupos de captura.

Manifestación

La expresión regular se puede dividir de la siguiente manera.

 ^ # match beginning of string (?= # begin a positive lookahead ([1-5]) # match a digit 1-5 and save to capture group 1 .* # match zero or more characters \1 # match the digit in capture group 1 ) # end positive lookahead (?= # begin a positive lookahead .+ # match one or more characters (?!\1) # next character is not the digit in capture group 1 ([1-5]) # match a digit 1-5 and save to capture group 2 .* # match zero or more characters \2 # match the digit in capture group 2 ) # end positive lookahead (?:\1|\2){5}$ # match a 5-character string comprised of the digits # in the two capture groups

Aquí hay una segunda expresión que podría usarse:

 ^(?=([1-5])\1*(?!\1)([1-5])(?:\1*\2){1,2}\1*$).{5}$

Manifestación

over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error