регулярное выражение в python для соответствия URL - PullRequest
1 голос
/ 26 сентября 2019

Мне нужно использовать python, чтобы соответствовать URL в моем текстовом файле.Тем не менее, есть особый случай:

i like ?pic.twitter.com/Sex8JaP5w5/a7htvq?

В этом случае я хотел бы оставить эмодзи рядом с URL-адресом и просто сопоставить URL-адрес в середине.

В идеале, я бы хотелхотелось бы иметь такой результат:

i like ?<url>?

Так как я новичок в этом, это то, что я имею до сих пор.

pattern = re.compile("([:///a-zA-Z////\.])+(.com)+([:///a-zA-Z////\.])")

, но возвращаемый результат является чем-то неудовлетворенным, как это:

i like ?<url>Sex8JaP5w5/a7htvq?

Не могли бы вы помочь мне с этим?Большое вам спасибо

Ответы [ 2 ]

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

Решение с использованием существующих пакетов:

from urlextract import URLExtract
import emoji

def remove_emoji(text):
  return emoji.get_emoji_regexp().sub(r'', text)

extractor = URLExtract()
source = "i like ?pic.twitter.com/Sex8JaP5w5/a7htvq? "
urlsWithEmojis = extractor.find_urls(source)
urls = list(map(remove_emoji, urlsWithEmojis))
print(urls)

output

['pic.twitter.com/Sex8JaP5w5/a7htvq']

Попробуйте онлайн!

По мотивам КакВы извлекаете URL-адрес из строки с помощью Python? и удаление смайликов из строки в Python

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

Если выглядит так, будто вы пропустили * или + в последней соответствующей группе, значит, она соответствует только одному символу.Итак, вы хотите "([:///a-zA-Z////\.])+(.com)+([:///a-zA-Z////\.])*" или "([:///a-zA-Z////\.])+(.com)+([:///a-zA-Z////\.])+".

Теперь я не знаю, упрощено ли это регулярное выражение для вашего случая, но оно не соответствует всем URL-адресам.В качестве примера этой проверки https://www.regextester.com/20

Если вы пытаетесь сопоставить какой-либо URL, я бы порекомендовал переосмыслить вашу проблему и попытаться упростить ее до более конкретных типов URL, как пример, который вы предоставили.

РЕДАКТИРОВАТЬ: И почему (.com)+?Действительно ли есть случай, когда несколько ".com" появляются как .com.com.com

Также я думаю, что у вас есть небольшая опечатка, и она должна быть (\.com).Но поскольку у вас есть ([:///a-zA-Z////\.])+, его можно уменьшить до (com), однако я думаю, что явное (\.com) делает его более простым для чтения выражением.

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