En el código de Python a continuación

import re

myText = "The color of the car is red. Which is a popular color."
regularExp = "The color of the car is\s*(?P<color>\w*)..*"
pattern = re.compile(regularExp)

match = re.search(pattern, myText)
color = match.groups("color")
print(color)

Espero que la salida sea red. Pero lo que obtengo es ('red',). ¿Qué estoy haciendo mal?

0
developer747 12 may. 2016 a las 19:42

3 respuestas

La mejor respuesta

Estás imprimiendo una tupla, no un str. Prueba esto:

print(color[0])

O (Crédito: Wiktor Stribiżew):

color = match.group("color")
print(color)
1
Robᵩ 12 may. 2016 a las 16:47

Re.search devuelve un objeto de coincidencia como usted puede ver que el método groups siempre devuelve una tupla. Por lo tanto, acceda al primer elemento del resultado color[0] o use la función group en su lugar:

color = match.group("color")

También tenga en cuenta que match.groups("color") probablemente no hace lo que cree que hace, para citar la documentación:

match.groups (predeterminado = Ninguno)

El argumento predeterminado se usa para grupos que no participaron en el partido; su valor predeterminado es Ninguno.

Lo que significa que establecerá el color en "color" si no se encuentra ninguna coincidencia para su grupo de colores.

3
H2O 12 may. 2016 a las 16:58

Para el objeto de coincidencia m, m.groups devuelve un tuple, una secuencia inmutable. Puedes indexarlo o

color = m.group(1) # m.group(n) for nth group

O

color = m.group('color') # for named group

Dijiste que ('red',) contenía caracteres no deseados . Esto probablemente significa que necesita repasar Python básico ya que no puede reconocer un tuple.

0
C Panda 12 may. 2016 a las 16:52