Estoy buscando una secuencia específica de números en una línea. Lo puedo explicar mejor con un ejemplo:

00001 # first search criteria - line 1
00010 # second search criteria - line 2

Entonces, cada línea tiene 5 dígitos de 0 o 1. Estoy buscando la combinación de todos los 0 excepto 1 dígito que puede ser un 1. Este 1 puede estar en cualquier posición de los 5 dígitos.

El código de expresiones regulares que tengo para 5 dígitos de 0 es

^((0\s*?){5}) # there may be spaces between the numbers

El caso de la línea 1 anterior se seleccionaría con el siguiente código de expresiones regulares:

^((0\s*?){4})\s*(1)

Mi pregunta es cómo podría escribir en código regex la posición cambiante de 1 para cubrir los 5 casos / posiciones. Gracias.

2
user1739581 28 ene. 2016 a las 02:04

2 respuestas

La mejor respuesta

Puede usar una expresión regular basada en anticipación para esto:

^(?=[0\s]*1[0\s]*$)(?:\s*[01]\s*){5}$

Demo de RegEx

Lookahead (?=[0\s]*1[0\s]*$) aplicará solo un solo 1 en cualquier posición de la entrada, mientras que (?:\s*[01]\s*){5} se asegurará de que la entrada tenga solo 0 y 1 con una longitud de 5 dígitos que también permita espacios en blanco en cualquier lugar.

1
anubhava 27 ene. 2016 a las 23:23

Puede utilizar dos condicionales.
El primero asegura que 1 no se encuentra de nuevo.
El segundo asegura que se encuentra 1.

(?:((?(1)(?!))1)|0){5}(?(1)|(?!))

Expandida

 (?:
      (                             # (1 start)
           (?(1) (?!) ) 1
      )                             # (1 end)
   |  0
 ){5}
 (?(1) | (?!) )
1
user557597user557597 28 ene. 2016 a las 02:55