Невозможно исключить нежелательные расширения файлов при получении писем с помощью регулярных выражений - PullRequest
0 голосов
/ 23 февраля 2019

Я написал скрипт на python, используя regular expression для получения адреса электронной почты с определенных веб-сайтов.Я использовал селен, так как немногие сайты являются динамическими.Тем не менее, мой сценарий работает нормально, пока на этих страницах нет таких расширений, похожих на электронную почту, как в himalayan-institute-logo@2x.png.

Как можно исключить расширения, заканчивающиеся .png или .jpg при получении писем?

Шаблон регулярного выражения, который я использовал:

[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+

Скрипт, который я пытаюсь использовать:

import re
from selenium import webdriver

URLS = (
    'https://www.himalayaninstitute.org/about/',
    'http://www.innovaprint.com.sg/',
    'http://www.cityscape.com.sg/?page_id=37',
    'http://www.yogaville.org',
    )

def get_email(driver,link):
    driver.get(link)
    email = re.findall(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+',driver.page_source)
    if email: 
        print(link,email[0])
    else: 
        print(link)

if __name__ == '__main__':
    chromeOptions = webdriver.ChromeOptions()
    chromeOptions.add_argument("--headless")
    driver = webdriver.Chrome(chrome_options=chromeOptions)
    for url in URLS:
        get_email(driver,url)
    driver.quit()

Вывод, который я имею:

https://www.himalayaninstitute.org/about/ himalayan-institute-logo@2x.png
http://www.innovaprint.com.sg/ info@innovacoms.com
http://www.cityscape.com.sg/?page_id=37 info@cityscape.com.sg
http://www.yogaville.org Yantra-@500.png

1 Ответ

0 голосов
/ 23 февраля 2019

Последняя часть [a-zA-Z0-9-.]+ - это широкое совпадение, в котором не учитывается положение точки.Например, он может также соответствовать .....

Одной из возможностей может быть использование первой части шаблона [a-zA-Z0-9_.+-]+@ для сопоставления, включая знак @.

Затем используйте положительный прогноз дляУтверждение, что справа, не заканчивается на .png или .jpg и соответствует шаблону, где точка находится между по крайней мере 1 символом, который не является точкой.

[a-zA-Z0-9_.+-]+@[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*(?!\.(?:png|jpg))\.[a-zA-Z0-9]+

Пояснение

  • [a-zA-Z0-9_.+-]+@ Соответствует разрешенному символу, за которым следует @
  • [a-zA-Z0-9]+ Соответствует любому из перечисленных в классе символов
  • (?: Группа без захвата
    • \.[a-zA-Z0-9]+ Совпадение с точкой, за которой в 1+ раз больше, чем указано в классе символов
  • )* Закройте группу без захвата и повторите 0+ раз
  • (?! Отрицательный взгляд, утверждайте, что это не
    • \.(?:png|jpg) Match .png или .jog
  • )\.[a-zA-Z0-9]+ Закрыть взгляд и совпадать 1+ разточка и то, что указано в классе символов

Regex demo

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