Есть ли способ сопоставить регулярное выражение, которое начинается с одной строки, но не * начинается с другой строки? - PullRequest
2 голосов
/ 27 марта 2020

Итак, я пытаюсь больше узнать о Python веб-очистке и пытаюсь найти внешние ссылки только для определенной c функции. В книгах, которые я читаю, автор реализует это, просто удаляя «http: //» из строки, а затем проверяя, содержит ли новая ссылка новую строку (то есть доменное имя без предшествующего «http: //»). .

Я вижу, как этот код может потерпеть неудачу, и хотя я могу просто написать оператор if, он заставляет задуматься - есть ли способ сопоставить все ссылки, которые начинаются с "http", но не с "http ( s): //domain.com "? Я пробовал много разных решений регулярных выражений, которые, как я думал, будут работать, но они не работают. Например, переменная" site "содержит адрес ссылки.

re.compile("^((?!"+site+").)^http|www*$"))
re.compile("^http|www((?!"+site+").)*$"))

Результаты I get будет просто ссылками, которые начинаются с http или www and, это не то, что я намереваюсь сделать. Опять же, я могу реализовать это прекрасно с помощью оператора if и отфильтровать результаты, это не полный блокировщик, но я Мне интересно узнать о такой возможности

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Я не рекомендую вам использовать regex для этой задачи, но я рекомендую использовать urlparse из urllib.parse модуля.

Вот пример:

$> from urllib.parse import urlparse
$> url = urlparse('https://google.com') 
ParseResult(scheme='https', netloc='google.com', path='', params='', query='', fragment='')
$> url.scheme
'https'
$> url.netloc
'google.com'
$> urlparse('https://www.google.com')
ParseResult(scheme='https', netloc='www.google.com', path='', params='', query='', fragment='')
1 голос
/ 27 марта 2020

Чтобы соответствовать строке, которая начинается с одной строки, но не с другой, вы должны использовать этот шаблон:

^(?!stringyoudontwant)stringyouwant.*

Итак, в вашем случае это будет:

^(?!https?:\/\/domain\.com)http.*

Для такого рода вещей вы можете проверить https://regex101.com, который является идеальным интерфейсом для экспериментов со сложными регулярными выражениями.

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