Regex с отрицанием для извлечения веб-ссылки - PullRequest
1 голос
/ 20 сентября 2019

У меня есть фрагмент текста:

.....https://www.one.com/privacy/\............http://two.com/terms/'.............https://three.com/pricing/\..........https://four.com/widget/wg74ythx;.........http://five.com/pricing .........

Мой код для извлечения веб-ссылок: link = re.compile(r'https?://(\w.*?)(\\|;|\'|\s)')

Но мне нужно исключить из моих результатов все ссылки со словами «конфиденциальность»или "виджет".Я застрял здесь, и мне нужна помощь сообщества.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Если вам не нужен объект компиляции, вы можете сделать что-то вроде

s = mystring urls = [url[0] for url in re.findall(r'https?://(\w.*?)(\\|;|\'|\s)',s) \ if not re.search('privacy|widget',url[0])]

0 голосов
/ 20 сентября 2019

вы можете использовать отрицательный взгляд :

import re
l = ["https://www.one.com/privacy/",
     "http://two.com/terms/",
     "https://three.com/pricing/",
     "https://four.com/widget/wg74ythx;",
     "http://five.com/pricing"]

pattern = re.compile("^(?!.*privacy|.*widget)(https?:\/\/(\w.*?)(\/|;|'|\s))")
for url in l:
    print(url)
    print(re.match(pattern, url))

дает

https://www.one.com/privacy/
None
http://two.com/terms/
<re.Match object; span=(0, 15), match='http://two.com/'>
https://three.com/pricing/
<re.Match object; span=(0, 18), match='https://three.com/'>
https://four.com/widget/wg74ythx;
None
http://five.com/pricing
<re.Match object; span=(0, 16), match='http://five.com/'>

, однако следите за правильным использованием слеша и обратного слеша, особенно в сочетании с обычными необработанные строки.

...