2016-03-17 4 views
0

Я не понимаю, почему следующее поведение re. Любой может объяснить, как строки обрабатываются в re.sub? почему утверждение 2 не соответствует & заменить? благодаряregex match & replace for raw string

1. >>> re.sub(r'\$abc', 'ABC', r'\$abcdefg') 
'\\ABCdefg' 

2. >>> re.sub(r'\\$abc', 'ABC', r'\\$abcdefg') 
'\\\\$abcdefg' 

3. >>> r'\\$abc' in r'\\$abcdefg' 
True 

4. >>> re.sub(r'\\\$abc', 'ABC', r'\\\$abcdefg') 
'\\\\ABCdefg' 
+0

ну, ваш 2-й оператор является рендерингом '\\\\ ABCdefg'. Каков ваш ожидаемый результат – Saleem

+0

[Невозможно выполнить повторный показ] (http://ideone.com/Fv92cA) –

+0

выглядит как stackoverlow - это испортить backslackes в моем сообщении. Теперь я пересмотрел его. Для утверждения 2 я не уверен, почему замена не происходит. в чем разница в обработке регулярных выражений между оператором 1/2/4? – abemaw

ответ

0

Это происходит потому, что в шаблоне (первый агд) двойная обратная косая черта \\ превращается только один, и, таким образом, не будет соответствовать.

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

Чтобы сделать регулярное выражение соответствует две косым чертам, вы должны добавить еще две косые черт:

2. >>> re.sub(r'\\\\\$abc', 'ABC', r'\\\$abcdefg') 
'\ABCdefg' 

Ссылка: re.sub

Надеется, что это помогает.

+0

спасибо за помощь. пожалуйста, взгляните на мое пересмотренное сообщение и комментарий. Даже регулярное выражение потребляет обратную косую черту, оно должно соответствовать третьему аргументу, правильно? – abemaw

+0

@abemaw. Кажется, вы удалили escape-символ в зарезервированный '$' (что означает, что совпадение должно происходить в конце строки). Было ли это предназначено? В любом случае, я думаю, проблема заключается в том, что вам следует избегать либо всех косых черт, либо '' '. –

+0

нет особых намерений. Я просто не понимаю, как «\» обрабатывается интерпретатором Python и механизмом регулярных выражений, так что оператор 2 не соответствует и не заменяет. – abemaw