Regex, чтобы поймать URL

1

У меня есть url: http://200.73.81.212/.CREDIT-UNION/update.php Ни одно из выражений reg, которые я нашел и не разработал, работает. Я работаю над набором фишинговых писем, и есть много странных гиперссылок. Это один из моих:
https?:\/\/([a-zA-z0-9]+.)+)|(www.[a-zA-Z0-9]+.([a-zA-Z0-9]+\.[a-zA-Z0-9]+)+)(((/[\.A-Za-z0-9]+))+/?
Конечно, никакого успеха. Я работаю на Python.
РЕДАКТИРОВАТЬ:
Мне нужно регулярное выражение, чтобы поймать этот тип URL, а также любые обычные гиперссылки, например:
https://cnn.com/
www.foxnews.com/story/122345678
Какие-нибудь мысли?

  • 2
    Регулярное выражение требует регулярного шаблона; нам нужен окончательный список URL для сравнения.
Теги:
python-3.x
http
regex-group

2 ответа

2
Лучший ответ

Как насчет чего-то подобного?

import re

phish = re.compile('''(?P<http>http\://)
                        (?P<ipaddress>(([0-9]*(\.)?)[0-9]*)*)/\.
                        (?P<name>(\.)?([A-Za-z]*)(\-)?([A-Za-z]*))/
                        (?P<ending>(update\.php))''', re.VERBOSE)

example_string = 'http://200.73.81.212/.CREDIT-UNION/update.php'

found_matches = []
# check that matches actually exist in input string
if phish.search(example_string):
    # in case there are many matches, iterate over them
    for mtch in phish.finditer(example_string):
        # and append matches to master list
        found_matches.append(mtch.group(0))

print(found_matches)
# ['http://200.73.81.212/.CREDIT-UNION/update.php']

Это достаточно гибко, поэтому теперь, если у вас есть альтернативные окончания, чем update.php, вы можете просто включить их в названную группу захвата, разделив все альтернативные финальные совпадения на |, т.е.

(update\.php|remove\.php, ...)

Кроме того, ваш IP-адрес с именем группы захвата может принимать любое число 123.23.123.12, он не должен быть фиксированным числом повторяющихся номеров, за которым следуют шаблоны периодов. Теперь я считаю, что IP-адреса закрываются на 3 номера, поэтому вы можете привязать их вниз, чтобы убедиться, что вы соответствуете правильным типам чисел с фигурными скобками:

[0-9]{2, 3}\. # minimum of 2 numbers, maximum of 3
  • 0
    @ Честно говоря, нужно много проб и ошибок. Эта книга очень помогла мне в достижении хороших результатов в регулярных выражениях в Python: amazon.com/Regular-Expressions-Cookbook-Solutions-Programming/…
0

Хотя ответ @datawrestler работает по оригинальному вопросу, мне пришлось расширить его, чтобы уловить более широкую группу URL (я отредактировал вопрос). Этот URL-адрес, похоже, работает для задачи:
r"""(https?://www\.[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+(/[a-zA-Z0-9.@-]+){0,20})|\ (https?://[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+(/[a-zA-Z0-9.@-]+){0,20})|\ (www.[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+(/[a-zA-Z0-9.@-]+){0,20})"""
Три альтернативы: https?://www, https://domain, www.domain

Ещё вопросы

Сообщество Overcoder
Наверх
Меню