2015-10-23 2 views
1

я после двух строкPython шаблону вопрос

root = 'svn\\456' 
dir = 'svn\\456\\765' 

pattern = re.compile('^'+root) 
matched = pattern.match(dir) 

Меня всегда соответствует None. Но если мне больше нравится

root = 'svn\\456' 
dir = 'svn\456\\765' 

pattern = re.compile('^'+root) 
matched = pattern.match(dir) 

Я получаю соответствие как истинный.

извините, если это действительно основная вещь, которую я здесь отсутствует. Но я только начинаю с python.

Спасибо.

+0

Используйте 'шаблон = re.compile ('^' + re.escape (корень))' и сырые строки. –

+0

Спасибо, что это сработало !!! – Nikhil

+0

Отправленный, пожалуйста, проверьте. –

ответ

1

Проблема с использованием 'svn\\456' в качестве образца, что \ это специальный символ, который требует побега, так что если вы измените первый шаблон для: 'svn\\\\456' вы получите матч:

import re 
root = 'svn\\\\456' 
dir = 'svn\\456\\765' 

pattern = re.compile('^'+root) 
matched = pattern.match(dir) # matched! 
0

You есть буквальная строка, которую вы пытаетесь использовать для создания объекта регулярного выражения. Он содержит специальный символ регулярного выражения, который должен быть экранирован.

Для этого вам необходимо использовать функцию re.escape.

Вот IDEONE demo:

import re 
root = r'svn\456' 
dir = r'svn\456\765' 

pattern = re.compile('^'+re.escape(root)) 
matched = pattern.match(dir) 
print(matched) 
+0

Если это сработало для вас, подумайте о принятии ответа (см. [Как принять ответы SO]] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)). –

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