Necesito una expresión regular que analice algo como ...

"2 * 240pin"

Donde * puede ser la estrella regular o el carácter unicode char \ u00d7 o simplemente una x. Esto es lo que tengo pero no funciona:

multiple= r'^(\d+)\s?x|*|\\u00d7\s?(\d+)(\w{2,4})$'
multiplepat= re.compile(multiple, re.I)
print multiplepat.search(u'1 X 240pin').groups()

Devuelve

multiplepat= re.compile(multiple, re.I)
File "C:\Python26\lib\re.py", line 188, in compile
return _compile(pattern, flags)
File "C:\Python26\lib\re.py", line 243, in _compile
raise error, v # invalid expression
error: nothing to repeat
3
robert 2 may. 2009 a las 18:26

3 respuestas

La mejor respuesta

Debe escapar del * ya que es un cuantificador en el contexto en que lo usa. Pero también podrías usar una clase de personaje. Entonces prueba esto:

ur'^(\d+)\s?[x*\u00d7]\s?(\d+)(\w{2,4})$'
2
Gumbo 2 may. 2009 a las 14:41

Utilice juegos de caracteres ([]): :

[]

Se usa para indicar un conjunto de caracteres. Los caracteres se pueden enumerar individualmente, o se puede indicar un rango de caracteres dando dos caracteres y separándolos por un '-'. Los caracteres especiales no están activos dentro de los conjuntos .

>>> m= u'^(\\d+)\\s?[x*\u00d7]\\s?(\\d+)(\\w{2,4})$'
>>> mpat=re.compile(m)
>>> mpat.search(u'1 * 240pin').groups()
(u'1', u'240', u'pin')
>>>
2
gimel 2 may. 2009 a las 14:44
multiple= r'^(\d+)\s[xX\*\\u00d7]\s?(\d+)(\w{2,4})$'
2
Francis 2 may. 2009 a las 14:39