2014-11-30 4 views
1

Мне нужно заменить \ на \\ с помощью python из соответствия шаблону. Например, $$\a\b\c$$ должен быть заменен на $$\\a\\b\\c$$.Заменить одиночную обратную косую черту на двойную обратную косую черту с помощью Python

Я не мог использовать регулярное выражение, чтобы найти совпадение.

>>> import re 
>>> p = re.compile("\$\$([^$]+)\$\$") 
>>> a = "$$\a\b\c$$" 
>>> m = p.search(a) 
>>> m.group(1) 
'\x07\x08\\c' 

Я не могу просто сделать вход в качестве исходной строки, таких как a=r'$$\a\b\c$$', потому что он автоматически обрабатывается процессором уценки. Я также обнаружил, что я не мог использовать заменить метод:

>>> a.replace('\\','\\\\') 
'$$\x07\x08\\\\c$$' 

Как я могу решить эту проблему?

+0

У вас есть доступ к инициализации 'a'? Если вы это сделаете, попробуйте 'a = r '$$ \ a \ b \ c $$'' (см. Http://stackoverflow.com/questions/2081640/what-exactly-do-and-r-string- flags-do-in-python-and-what-are-raw-string-l) – BorrajaX

+0

@BorrajaX: Нет, это возвращаемое значение из регулярного выражения. – prosseek

+0

Hmmmmpffrrr ... Daang ... Не могли бы вы разместить часть, которая вычисляет это 'a'? Как только ваша строка оценивается, нет пути назад (он не знает, что '\ x07' пришел из' \ a'. Может быть, что-то можно сделать, прежде чем вы получите это 'a'? – BorrajaX

ответ

2

Причина у вас возникли проблемы, потому что строка вы ввод является $$\a\b\c$$, что питон переводит '$$\x07\x08\\c$$', а только обратный слэш в строке на самом деле в сегменте «\ с» лучшим способ борьбы с этим было бы, чтобы ввести в качестве такого

a=r'$$\a\b\c$$' 

Это покажет питон для преобразования строковых литералов в качестве исходных символов. Если вы читаете в файле, это делается автоматически для вас.

0

Разделите строку с помощью одной обратной косой черты, затем присоедините полученный результирующий список с двойной обратной косой чертой.

s = r'$$\a\b\c$$' 
t = r'\\'.join(s.split('\\')) 
print('%s -> %s' % (s, t)) 
Смежные вопросы