Вы читаете весь файл в переменную (в память), используя .read()
.С .replace("\n", "")
вы перезапускаете все новые строки в строке.re.match(r'^\/m\/[a-zA-Z0-9_-]+$', contents)
пытается сопоставить строку, которая полностью соответствует шаблону \/m\/[a-zA-Z0-9_-]+
, и это невозможно после всех предыдущих манипуляций.
Есть как минимум два выхода.Либо удалите .replace("\n", "")
(чтобы предотвратить удаление новой строки) и используйте re.findall(r'^/m/[\w-]+$', contents, re.M)
(опция re.M
включит сопоставление целых строк , а не всего текста), либо прочитайте файл построчно и используйте свой *Версия 1012 * для проверки каждой строки на совпадение и, если она совпадает, добавьте в окончательный список.
Пример:
import re
with open("testfile.txt", "r") as text_file:
contents = text_file.read()
print(re.findall(r'^/m/[\w-]+$', contents, re.M))
Или
import re
with open("testfile.txt", "r") as text_file:
for line in text_file:
if re.match(r'/m/[\w-]+\s*$', line):
print(line.rstrip())
Примечание Iиспользовал \w
, чтобы сделать шаблон несколько короче, но если вы работаете в Python 3 и хотите только сопоставлять буквы и цифры ASCII, используйте также параметр re.ASCII
.
Кроме того, /
не являетсяспециальный символ в шаблонах регулярных выражений Python, избавляться от него не нужно.