Encuentre todos los patrones de «1(0+)1» en una string dada usando Python Regex

Una string contiene patrones de la forma 1(0+)1 donde (0+) representa cualquier secuencia consecutiva no vacía de 0. Cuente todos esos patrones. Se permite que los patrones se superpongan. Nota: Solo contiene dígitos y caracteres en minúsculas. La string no es necesariamente un binario. 100201 no es un patrón válido. Ejemplos:

Input : 1101001
Output : 2

Input : 100001abc101
Output : 2

Tenemos una solución existente para este problema, consulte Buscar todos los patrones de «1 (0+) 1» en un enlace de string dado. También se publica otro conjunto que contiene una solución similar que usa expresiones regulares en Java . Resolveremos este problema rápidamente en python usando Regex . El enfoque es muy simple:

  1. Busque una primera substring en la string original que siga el patrón ’10+1′ usando el método re.search(regex,string) .
  2. substr = re.search(regex,string) devuelve Ninguno si no encuentra la expresión regular dada como substring en la string original; de lo contrario, devuelve la primera substring coincidente que sigue el patrón ’10+1′. substr.start() nos da el índice inicial de la expresión regular coincidente y substr.end() nos da el índice final de la expresión regular coincidente.
  3. Siempre que encontremos expresiones regulares como substring, aumente el conteo en 1 y busque nuevamente la expresión regular dada a partir del índice final de la substring anterior.

Python3

# Python program to Find all the patterns
# of “1(0+)1” in a given string using Python Regex
 
import re
 
# Function to Find all the patterns
# of “1(0+)1” in a given string
def extract(input):
 
    # search regex '10+1' in original string
    # search() function return first occurrence
    # of regex '10+1' otherwise None
    # '10+1' means sub-string starting and ending with 1
    # and atleast 1 or more zeros in between
    count=0
    substr = re.search('10+1',input)
     
    # search for regex in original string
    # until we are done with complete string
    while substr!=None:
        # if we find any occurrence then increase count by 1
        count=count+1
         
        # find next occurrence just after previous
        # sub-string
        # for first occurrence 101, substr.start()=1
        # substr.end()=4
        input = input[(substr.end()-1):]
        substr = re.search('10+1',input)
    print (count)
 
# Driver program
if __name__ == "__main__":
    input = '1101001'
    extract(input)

Producción:

2

Publicación traducida automáticamente

Artículo escrito por Shashank Mishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *