Python: búsqueda anticipada de expresiones regulares

Lookahead se utiliza como una afirmación en las expresiones regulares de Python para determinar el éxito o el fracaso si el patrón está por delante, es decir, a la derecha de la posición actual del analizador. No coinciden con nada. Por lo tanto, se denominan aserciones de ancho cero.

Sintaxis:

# Positive lookahead
(?=<lookahead_regex>)

Ejemplo 1:

Python3

# importing regex
import re
  
# lookahead example
example = re.search(r'geeks(?=[a-z])', "geeksforgeeks")
  
# display output
print("Pattern:", example.group())
print("Pattern found from index:",
      example.start(), "to",
      example.end())

Producción:

Pattern: geeks
Pattern found from index: 0 to 5

La aserción de anticipación (?=[az]) especifica que lo que sigue a geeks debe ser un carácter alfabético en minúsculas. En este caso, es el carácter f , se encuentra una coincidencia.

Ejemplo 2:

Python3

# importing regex
import re
  
# Lookahead example
example = re.search(r'geeks(?=[a-z])', 
                    "geeks123")
  
# output
print(example)

Producción:

None

En el ejemplo anterior, el resultado es Ninguno porque el siguiente carácter después de geeks es 1. No es un carácter alfabético en minúsculas.

La parte de búsqueda anticipada no forma parte de la string de búsqueda. Por lo tanto, se denomina aserción de ancho cero. Son importantes cuando no desea que la salida devuelva la parte de búsqueda anticipada presente en la string de búsqueda, pero desea usarla para hacer coincidir el patrón seguido por una sección en particular. El siguiente ejemplo lo aclarará.

Ejemplo 3:

Python3

# import required module
import re
  
# using lookahead
example1 = re.search(r'geeks(?=[a-z])',
                     "geeksforgeeks")
  
print('Using lookahead:', example1.group())
  
# without using lookahead
example2 = re.search(r'geeks([a-z])',
                     "geeksforgeeks")
  
print('Without using lookahead:', example2.group())

Producción:

Using lookahead: geeks
Without using lookahead: geeksf

Al usar la búsqueda anticipada, la salida generada es ‘geeks’, mientras que sin usar la búsqueda anticipada, la salida generada es geeksf . La f es consumida por expresiones regulares y se convierte en parte de la string de búsqueda. 

La anticipación negativa es lo opuesto a la anticipación. Es para asegurar que la string de búsqueda no sea seguida por <lookahead_regex>.

Sintaxis:

# Negative Lookahead
(?!<lookahead_regex>) 

Ejemplo 4:

Python3

# import required module
import re
  
# positive lookahead
example1 = re.search('geeks(?=[a-z])',
                     'geeksforgeeks')
print('Positive Lookahead:', example1.group())
  
# negative lookahead
example2 = re.search('geeks(?![a-z])',
                     'geeks123')
print('Negative Lookahead:', example2.group())

Producción:

Positive Lookahead: geeks
Negative Lookahead: geeks

En el ejemplo anterior, el resultado es geeks porque la string de búsqueda geeks aquí no va seguida de letras minúsculas.

Publicación traducida automáticamente

Artículo escrito por sailees14032000 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 *