Регулярное выражение: как сопоставить строку, содержащую "\ n" (перевод строки)? - PullRequest
9 голосов
/ 16 ноября 2011

Я пытаюсь вывести данные из файла экспорта SQL с помощью регулярного выражения.Чтобы соответствовать полю содержимого публикации, я использую '(?P<content>.*?)'.Он работает нормально большую часть времени, но если поле содержит строку '\ n', регулярное выражение не будет совпадать.Как я могу изменить регулярное выражение, чтобы соответствовать им?Спасибо!

Пример (я использую Python):

>>> re.findall("'(?P<content>.*?)'","'<p>something, something else</p>'")
['<p>something, something else</p>']

>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'")
[]

PS Кажется, что все строки с '\' в начале обрабатываются как escape-символы.Как я могу сказать regx относиться к ним, как они?

Ответы [ 2 ]

24 голосов
/ 16 ноября 2011

Вы должны использовать DOTALL параметр:

>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'", re.DOTALL)
['<p>something, \n something else</p>']

См. это .

3 голосов
/ 16 ноября 2011

Вам нужен модификатор Dotall, чтобы точка также соответствовала символам новой строки.

re.S
re.DOTALL
Сделать '.' специальный символ соответствует любому символу в все, включая перевод строки; без этого флага '.' будет соответствовать чему угодно кроме новой строки.

См. здесь, на docs.python.org

...