Как правильно использовать re.sub для захвата групп? - PullRequest
1 голос
/ 30 марта 2020

У меня есть URL, который выглядит следующим образом:

url = https://www.sx.com/found/text.html

Я хочу заменить текст между третьим и четвертым sla sh группой захвата, т.е. я хочу заменить 'found' на новая строка (новости), подобная этой:

replace = re.sub(r'(?:/.*/)(.*)/', r'/news/\1', url)

Желаемый результат:

replace = https://www.sx.com/news/text.html

Однако я получаю этот результат:

https:/news/text.html

Что я здесь не так делаю

Ответы [ 2 ]

3 голосов
/ 30 марта 2020

Несмотря на то, что вы должны использовать urllib, чтобы сделать это, вы можете попробовать

(//.*/).*/

Заменить на

\1news/

См. Демонстрацию.

https://regex101.com/r/cuNe0j/1

Или вы можете попробовать это. При этом вам не нужно заботиться о url разборе.

from urlparse import urlparse, urlunsplit
x= urlparse("https://www.sx.com/found/text.html")
y= x.path.replace("found", "news")
print urlunsplit([x.scheme, x.netloc, y,
         x.query, x.fragment])
3 голосов
/ 30 марта 2020

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

>>> url = 'https://www.sx.com/found/text.html'
>>> print ( re.sub(r'(.+/)[^/]+(/[^/]*/?)$', r'\1news\2', url) )
https://www.sx.com/news/text.html

Подробности RegEx:

  • (.+/): совпадение жирности 1+ любых символов, за которыми следует /. Группа захвата # 1
  • [^/]+: совпадение 1+ с любым символом, отличным от /
  • (/ [^ /] * /?): Совпадение следующего /, за которым следует не- / символ до конца. Группа захвата № 2
  • $: конец
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...