Вы можете исправить свой код, если добавите флаг re.M
:
re.findall(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$", my_file.read(), re.M)
Поскольку вы читаете весь файл с помощью my_file.read()
, ^
и $
должны соответствовать началу / концу строка , а не строка , и флаг re.M
делает это.
Кроме того, вы можете читать файл построчно и получать только те строки, которыеполностью соответствует вашему шаблону:
items = []
email_rx = re.compile(r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$")
with open('emails.txt', 'r+') as my_file:
for line in my_file:
if email_rx.match(line):
items.append(line)
Обратите внимание, что необходим только $
привязка, так как re.match
only привязки соответствуют в начале строки .
Примечаниечто у вас могут быть окончания CRLF, тогда вы можете либо rstrip
каждую строку перед проверкой на регулярное выражение и добавить к items
, либо добавить шаблон \s*
в конце перед $
привязкой.