Соответствие началу строки в регулярном выражении (^ возвращает пустой список) - PullRequest
0 голосов
/ 22 марта 2020

Я использую Python модуль re для извлечения некоторой информации из файла .txt.

Мой файл .txt выглядит следующим образом:

621345
21345[45]6213
421345[45]21345
21345[45]6213456
66456
21345[45]621345

Я хочу сопоставить строки, начинающиеся с 21345.

Мой код выглядит следующим образом:

import re

pattern = re.compile('^21345.+')
filename = 'myfile.txt'


with open(filename, 'r') as f:
    found = re.findall(pattern, f.read())
    print(found)

Возвращает пустой список. Он должен вернуть:

['21345[45]6213', '21345[45]6213456', '21345[45]621345']

Я попытался сопоставить только 21345, который работает. Когда я добавляю ^, я начинаю получать пустой список.

1 Ответ

5 голосов
/ 22 марта 2020

Ваша проблема в том, что якорь ^ соответствует началу строки по умолчанию. file.read() читает весь ваш текстовый файл в одном go, и результирующая строка не соответствует вашему запросу (учитывая, что первая строка не начинается с определенной последовательности), следовательно, пустой список. Если вы хотите соответствовать началу каждой строки, установите флаг re.MULTILINE при компиляции вашего паттерна, например

pattern = re.compile('^21345.+', re.MULTILINE)

, который вернет желаемый список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...