Python регулярное выражение с символами новой строки не совпадает - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть файл, который содержит

Line1
Line2
Line3
Line4

, и в программе на Python я ищу

Line1
Line2
Line3

Программа

import re

file = open("blah.log","r")
file_contents = file.read()

pattern='''Line1
Line2 
Line3'''

matchObj = re.search(pattern, file_contents, re.M|re.I)
if matchObj:
   print matchObj.group(0)
else:
   print "No match!!"

Однако,он не показывает соответствия, даже если шаблон находится в файле.

Но если

file_contents = '''Line1
Line2
Line3
Line4''' # not reading from the file 

Теперь он совпадает с шаблоном регулярных выражений.

В чем причина этого?

Как я могу заставить программу работать с чтением содержимого из файла?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Символ новой строки в файле может быть '\ n', '\ r' или '\ r \ n'.Это зависит от ОС.Чтобы быть в безопасности, попробуйте сопоставить все символы новой строки.

pattern='''Line1(\n|\r|\r\n)Line2(\n|\r|\r\n)Line3'''
0 голосов
/ 04 декабря 2018

Поскольку строки в вашем файле разделены '\r\n', шаблон, который вы ищете, должен это учитывать.

Для удобства вы все равно можете использовать тройные кавычки для инициализации строки, которую хотите найти, но затем используйте метод str.replace(), чтобы заменить все вхождения '\n' на '\r\n':

pattern='''Line1
Line2 
Line3'''.replace('\n', '\r\n')

Кроме того, если все, что вам нужно, это совпадение подстроки, вы можете использовать оператор inвместо более дорогостоящего соответствия регулярному выражению:

if pattern in file_contents:
   print pattern
else:
   print "No match!!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...