RegEx XXI: grupos no capturantes

Published by Alessandro Manicone in

Un grupo no capturante coincidirá con "x" en (?:x), pero la coincidencia no se almacenará, lo que significa que no podrás acceder a ella mediante una referencia inversa y no se mostrará por separado al usar re.findall().

Veamos un ejemplo de la diferencia entre los grupos capturantes y no capturantes:

txt = "red car, blue car, yellow car, green car, red car, red bike, blue bike"

pattern1 = "(red|blue) car"
pattern2 = "(?:red|blue) car"
pattern3 = "red|blue car"
pattern4 = "((red|blue) (car|bike))"
pattern5 = "((red|blue) (?:car|bike))"


re.findall(pattern1, txt) ➞ ["red", "blue", "red"]
re.findall(pattern2, txt) ➞ ["red car", "blue car", "red car"]
re.findall(pattern3, txt) ➞ ["red", "blue car", "red", "red"]
re.findall(pattern4, txt) ➞ [("red car", "red", "car"), ("blue car", "blue", "car"), ("red car", "red", "car"), ("red bike", "red", "bike"), ("blue bike", "blue", "bike")]
re.findall(pattern5, txt) ➞ [("red car", "red"), ("blue car", "blue"), ("red car", "red"), ("red bike", "red"), ("blue bike", "blue")]
  • La primera expresión coincide con "red" o "blue", siempre que después aparezca " car".
  • La segunda expresión coincide con "red car" o "blue car".
  • La tercera expresión coincide con "red" o "blue car".
  • En la cuarta expresión, coincide con una de las siguientes posibilidades: "red car", "red bike", "blue car", "blue bike". Devolverá una tupla por cada coincidencia que contenga un elemento por cada grupo capturante; en este caso: la expresión completa, el color y el tipo de vehículo.
  • La quinta expresión es similar a la cuarta, excepto que el tipo de vehículo es un grupo no capturante. Como puedes ver, no se devuelve por separado.

Escribe una expresión regular que coincida con cualquier par de artículo + sustantivo. Los artículos son "a/an" o "the". Usa grupos no capturantes en tu expresión.

Ejemplo

txt = "There is an apple and a pen on the desk"
pattern = "yourregularexpressionhere"

re.findall(pattern, txt) ➞ ["an apple", "a pen", "the desk"]

Notas

  • No necesitas escribir una función, solo el patrón.
  • No elimines import re del código.
  • Encuentra más información sobre RegEx y los grupos no capturantes en Recursos.
  • Puedes encontrar todos los desafíos de esta serie en mi colección Basic RegEx.