2014-01-31 2 views
0

Я пытаюсь подставить регулярное выражение другим шаблоном. В частности, я хочу заменить $$ some_latex $$ на $latex some_latex$. Я пробовал следовать.Кодировка символов в замещении регулярных выражений

In [22]: re.sub(r'\$\$(?P<pat>.+?)\$\$', r'$latex \1 $', "$$ x = \frac{2}{3}$$", re.DOTALL | re.U) 
Out[22]: '$latex x = \x0crac{2}{3} $' 

Слово \frac преобразуется в \x0crac. Как преодолеть это. Я тоже пробовал. Это не помогло.

re.sub(r'\$\$(?P<pat>.+?)\$\$', r'$latex \1 $', "$$ x = \frac{2{3}$$".encode("string_escape"), re.DOTALL | re.U) 
'$latex x = \\x0crac{2}{3} $' 

ответ

1

Это не имеет никакого отношения к регулярному выражению; \f это код побег форма подачи:

>>> '\f' 
'\x0c' 
>>> len('\f') 
1 

Персонаж находится в вашем входе уже присутствует до замены даже иметь место:

>>> "$$ x = \frac{2}{3}$$" 
'$$ x = \x0crac{2}{3}$$' 

Двойной слэш или использовать необработанный строкового литерала:

>>> '\\f' 
'\\f' 
>>> r'\f' 
'\\f' 
>>> print '\\f' 
\f 
>>> len('\\f') 
2 
+0

Теперь, если я хочу изменить '\\ f' обратно на' \ f'? 'replace ('\\\\', '\\')' не работает. – Dilawar

+1

@ Dilawar: интерпретатор дает вам * представление *; буква Python, так же, как вы его вводите. '\\' готов к экранированию, это * не * значение. Если вы используете 'print', вы увидите, что есть только один символ обратной косой черты. Вам ничего не нужно заменять. –

Смежные вопросы