2014-09-12 2 views
0

Я ищу блок текста для строки новой строки, за которой следует период.python regex search pattern

pat = '\n\.' 
block = 'Some stuff here. And perhaps another sentence here.\n.Some more text.' 

По какой-то причине, когда я использую регулярное выражение для поиска моего шаблона он изменяет значение погладить (с помощью Python 2.7).

import re 
mysrch = re.search(pat, block) 

Теперь значение погладить было изменено:

'\n\\.' 

Что баловаться со следующим поиском, который я использую для погладить. Почему это происходит, и как я могу избежать этого?

Большое спасибо заблаговременно.

+2

Вы должны использовать сырые строки. do 'pat = r '\ n \.'' Здесь повторяется куча вопросов, но суть в том, что, поскольку оба Python и Regex используют '' '' '' '' как escape-символ, вы используете синтаксис сырой строки, чтобы сказать Python НЕ рассматривать его как escape, что ваша строка LITERALLY обратная косая черта-n-backslash-точка, а не символ новой строки-обратной косой черты. –

ответ

1

Дополнительная косая черта на самом деле не является частью строки - сама строка не изменилась вообще.

Вот пример:

>>> pat = '\n\.' 
>>> pat 
'\n\\.' 
>>> print pat 

\. 

Как вы можете видеть, когда вы печатаете погладить, это только одна \ в нем. Когда вы выгружаете значение строки, он использует функцию __repr__, которая предназначена для однозначного отображения того, что находится в строке, поэтому она показывает вам экранированную версию символов. Например, \n - это экранированная версия новой строки, \\ - это экранированная версия \.

Ваше регулярное выражение, вероятно, не соответствует тому, как вы ожидаете, потому что в нем есть символ новой строки, а не буквальная строка "\n" (в редакции: "\\n").

Вы должны либо сделать свое регулярное выражение необработанной строкой (как указано в комментариях).

>>> pat = r"\n\." 
>>> pat 
'\\n\\.' 
>>> print pat 
\n\. 

Или вы могли бы просто избежать косой черты и использовать

pat = "\\n\\." 
+0

Ах. Большое спасибо. r "" должно было произойти со мной. – rlantz