2012-02-04 28 views
6

Dada la siguiente cadena:Python partido de expresiones regulares asterisco literal

s = 'abcdefg*' 

¿Cómo se puede hacer coincidir o cualquier otra cadena única compuesta de las letras minúsculas y opcionalmente que terminan con un asterisco? Pensé que el siguiente iba a funcionar, pero no es así:

re.match(r"^[a-z]\*+$", s) 

Da None y no un objeto partido.

Respuesta

13

¿Cómo puedo unirlo o cualquier otra cadena hecha solo con letras minúsculas y opcionalmente terminando con un asterisco?

El siguiente lo hará:

re.match(r"^[a-z]+[*]?$", s) 
  1. El ^ coincide con el inicio de la cadena.
  2. El [a-z]+ coincide con una o más letras minúsculas.
  3. El [*]? coincide con cero o con un asterisco.
  4. El $ coincide con el final de la cadena.

Su expresión regular original coincide exactamente con un carácter en minúsculas seguido de uno o más asteriscos.

4

\*? significa 0-o-1 asterisco:

re.match(r"^[a-z]+\*?$", s) 
1

Trate

re.match(r"^[a-z]*\*?$", s) 

esto significa "una cadena que consiste en cero o más caracteres en minúsculas (de ahí el primer asterisco), seguido de cero o un asterisco (el signo de interrogación después del asterisco escapado).

Su expresión regular significa "exactamente un carácter en minúscula seguido de uno o más asteriscos".

0

Olvidó el signo + después de la coincidencia [a-z] para indicar que desea 1 o más de ellos también (en este momento solo coincide con uno).

re.match(r"^[a-z]+\*+$", s) 
2
re.match(r"^[a-z]+\*?$", s) 

El [a-z]+ coincide con la secuencia de letras minúsculas, y \*? coincide con una opcional literal * chatacter.

Cuestiones relacionadas