Python Regex: замените все URL-адреса в строке ссылками HTML, исключая .png, .gif, .jpg, .jpeg

Если вы ищете список этих атрибутов, XPath будет вашим другом

print_r($xml->xpath('@token'));
0
задан MaxCore 13 July 2018 в 17:07
поделиться

2 ответа

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

import re
def href(d, skip = ['.png', '.gif', '.jpg', '.jpeg']):
  return f'<a href="{d}">{d}</a>' if not re.findall('|'.join(skip), d) else d

s = """
La-la-la https://example.com/ https://example.com/
https://example.com/ la-la-la https://example.com/
la-la-la https://example.com/ la-la-la
"""
new_s = re.sub('https*://.*?(?=[\s$])', lambda x:href(x.group()), s)

Выход:

La-la-la <a href="https://example.com/">https://example.com/</a> <a href="https://example.com/">https://example.com/</a> <a href="https://example.com/">https://example.com/</a> la-la-la <a href="https://example.com/">https://example.com/</a> la-la-la <a href="https://example.com/">https://example.com/</a> la-la-la
2
ответ дан Ajax1234 17 August 2018 в 12:21
поделиться
  • 1
    Я не знал, что лямбда в sub возможна. TIL, спасибо! – Andrej Kesely 13 July 2018 в 17:25
  • 2
    @AndrejKesely Это довольно мощный и намного проще, чем использование форматирования строк или f-strings. – Ajax1234 13 July 2018 в 17:27
  • 3
    Да, точно! Я не помню, сколько раз я делал некоторые неудобные обходные пути - это могло бы упростить так много вещей :) – Andrej Kesely 13 July 2018 в 17:29
`badtags = ['.png', '.gif', 'jpg', 'jpeg']
 goodurls = ['https://', 'http://']
 for line in string:
     for word in line.strip().split():
         if(word[0:7] == 'https://' or word[0:6] == 'http://'):
             if(not word[-4:] in badtags):
                 // replace logic
`

Это довольно простой способ сделать это, вам, возможно, придется использовать обычный цикл итерации для цикла, чтобы иметь возможность индексировать ваш исходный массив.

1
ответ дан Zach 17 August 2018 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: