Как извлечь строку всегда идет после конкретной строки и, необязательно, после строки - PullRequest
0 голосов
/ 28 февраля 2019

Если у меня есть строка, то ей всегда предшествует http://, а при желании следует /.Пример:

http://www.mymovies.com/

Но иногда может быть в формате: http://www.mymovies.com

Я хочу извлечь www.mymoviews.com Я хочу захватить оба формата (с / без /)

Я пытался использовать:

import re
print(re.search('http://(.*)/','http://www.mymovies.com').group(1))

Но я получаю эту ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

1) Как решить ошибку 2) Как захватить как с / безследующий / символ (поскольку мое решение требует /

Ответы [ 4 ]

0 голосов
/ 01 марта 2019

Вы можете сделать это без регулярных выражений, используя метод split ():

url.split("/")[2]

'http://www.mymovies.com/'.split("/")[2] ==> "www.mymovies.com"

'http://www.mymovies.com'.split("/")[2] ==> "www.mymovies.com"

'http://www.mymovies.com/star-wars/episodeV'.split("/")[2] ==> "www.mymovies.com"
0 голосов
/ 28 февраля 2019

Попробуйте Regex: (?<=http:\/\/)\[^\/\]+?(?=\/|$)

Демо

0 голосов
/ 01 марта 2019

Вы можете использовать

m = re.search(r'https?://([^/]*)/?','http://www.mymovies.com')
if m:
    print(m.group(1))

См. Демоверсию regex

Подробности

  • http- http подстрока
  • s? - 1 или 0 s символов
  • :// - :// подстрока
  • ([^/]*) - Группа захвата 1: ноль или более символов, отличных от /
  • /? - 1 или 0 / символов.

Python demo (печатается четыре www.mymovies.com как вывод):

import re
strs = ['http://www.mymovies.com/','http://www.mymovies.com','https://www.mymovies.com/','https://www.mymovies.com']
r = re.compile(r'https?://([^/]*)/?')
for s in strs:
    m = r.search('http://www.mymovies.com')
    if m:
        print(m.group(1))
0 голосов
/ 28 февраля 2019

Строка поиска http://(.*)/, поэтому / в конце обязателен.Если вы поставите ? после него, вы сделаете его необязательным, или вы можете просто пропустить его полностью.Если вы не хотите, чтобы она была частью результирующей строки, либо ограничьте соответствующие символы перед ней всем, кроме /:

https://([^/]*)

, либо выполните простую проверку последнего символа после операциии удалите его, если это /:

if result[-1] == "/": result = result[:-1]

Следует также отметить, что если ваши входные данные могут быть полными URL-адресами (включая пути и пары ?key=value), вы должны еще больше ограничить соответствующие символы.

...