Python регулярный опыт с символом Unicode - PullRequest
3 голосов
/ 02 мая 2009

Мне нужен reg exp, который будет анализировать что-то вроде -

"2 * 240pin"

где * может быть либо обычной звездой, либо символом юникода \ u00d7, либо просто x. Это то, что у меня есть, но оно не работает:

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()

возвращает

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 ]

2 голосов
/ 02 мая 2009

Вам нужно экранировать *, так как это квантификатор в контексте, в котором вы его используете. Но вы также можете использовать класс персонажей. Итак, попробуйте это:

ur'^(\d+)\s?[x*\u00d7]\s?(\d+)(\w{2,4})$'
2 голосов
/ 02 мая 2009

Использовать наборы символов ([]) :

[]

Используется для обозначения набора символов. Символы могут быть перечислены по отдельности, или диапазон символов может быть указан путем предоставления двух символов и разделения их на «-». Специальные наборы не активны внутри наборов .

>>> 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 голосов
/ 02 мая 2009
multiple= r'^(\d+)\s[xX\*\\u00d7]\s?(\d+)(\w{2,4})$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...