регулярное выражение с использованием языка Python - PullRequest
1 голос
/ 05 марта 2019

У меня есть текстовый файл с различными адресами электронной почты и другими строками, которые не являются действительными электронными письмами, я пытаюсь распечатать только действительные адреса электронной почты, когда я использую код ниже, ничего не печатается. Это содержимое текстового файла:

blbabal@gmail.com   
hey@gmail.com

lalalalal

В этом случае должны быть напечатаны только оба адреса электронной почты

 import re

    my_file = open('emails.txt', 'r+')

Ответы [ 3 ]

1 голос
/ 05 марта 2019

Вы можете исправить свой код, если добавите флаг 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* в конце перед $ привязкой.

0 голосов
/ 05 марта 2019

Это должно напечатать все электронные письма в файле

import re
reg = '[A-Za-z0-9.]+@[A-Za-z0-9]+[.][a-z]+'
with open('email.txt', 'r') as f1:
    for email in f1:
        if(len(re.findall(reg,email))!=0):
            print(email)

И это должно получить только электронные письма всей линии -

import re
reg = '[A-Za-z0-9.]+@[A-Za-z0-9]+[.][a-z]+'
with open('email.txt', 'r') as f1:
    for email in f1:
        if(len(re.findall(reg,email))):
            if(len(re.findall(reg,email)[0])==len((email.replace("\n","")))):
                print(email)
0 голосов
/ 05 марта 2019
import re
my_file = open('emails.txt', 'r+')
items = re.findall(r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)", my_file.read())
for items in items:
    print(items)

Две проблемы

  1. для элемента в элементах вместо файла
  2. удалите ^ и $ из вашего паттерна.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...