2016-01-11 4 views
0

Я знаю из этого question что, nothing to repeat в выражении регулярного выражения, является известной ошибкой python. Но я должен скомпилировать это выражение ЮникодаКак исправить ошибку «ничего повторить»?

re.compile(u'\U0000002A \U000020E3') 

как уникальный характер. Это смайлик и является уникальным персонажем. Python понимает эту строку как u'* \\u20e3' и поднимает ошибку «ничего повторить». Я оглядываюсь, но я не могу найти решение. Существует ли какая-либо работа вокруг?

+0

Если вы имеете в виду вы хотите, чтобы соответствовать этим символам буквально, не рассматриваются как шаблоны регулярных выражений, то у вас есть ответ ниже. –

ответ

5

Это не имеет никакого отношения к вопросу, который вы связали. Вы не сталкиваетесь с ошибкой. В вашем регулярном выражении есть специальный символ (*), который вы не сбежали.

Просто избежать строки до компиляции его в регулярное выражение:

re.compile(re.escape(u'\U0000002A \U000020E3')) 

Теперь, я немного не уверен, почему вы представляете *, как \U0000002A - возможно, вы могли бы уточнить, что ваш намерение здесь?

+0

'u '\ U0000002A \ U000020E3'' - это смайлик. Я должен поймать его в регулярном выражении как один символ. Выход из него не работает. Но когда я пытаюсь скомпилировать его, «ничего не повторять ошибку» не возникает. – emanuele

+0

Thomas, OP считывает их из файла (шаблоны являются «динамическими»). Этот вопрос, похоже, связан с предыдущими постами ОП. –

+0

@emanuele, в то время как этот символ представлен как один символ, это не технический символ. Это не имеет большого значения, хотя проблема может быть в другом месте. Можете ли вы показать, как вы используете это регулярное выражение и на каком входе? –

0

Вы должны использовать re.escape (как показано в «Томас Ороско» ответ) Но использовать его только в той части, которая является динамическим, такими как:

print re.findall(u"cool\s*%s" % re.escape(u'\U0000002A \U000020E3'), 
       u"cool  * \U000020E3 crazy") 
Смежные вопросы