Python Regex: Замените все URL-адреса в строке с помощью & lt; img & gt; и & lt; a & gt; теги

Работает ли это с консоли? Это работает для меня:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.6.5
BuildVersion:   10H574

$ rails c
Loading development environment (Rails 3.0.3)
>> 1.week.ago
=> Sun, 14 Nov 2010 16:57:18 UTC +00:00
2
задан MaxCore 13 July 2018 в 14:16
поделиться

2 ответа

Вы можете сделать это без regex, если хотите.

stng = 'La-la-la https://example.com/ la-la-la https://example.com/example.PNG'

sentance = '{f_txt} <a href="{f_url}">{f_url}</a> {s_txt} <img src="{s_url}">'

f_txt, f_url, s_txt, s_url = stng.split()

print(sentance.format(f_txt=f_txt, f_url=f_url, s_txt=s_txt, s_url=s_url))

Выход

La-la-la <a href="https://example.com/">https://example.com/</a> la-la-la <img src="https://example.com/example.PNG"> 
1
ответ дан Druta Ruslan 17 August 2018 в 12:38
поделиться
  • 1
    Но последовательность текста и ссылок не определена и непредсказуема – MaxCore 13 July 2018 в 14:27

Вы можете использовать следующее регулярное выражение:

(https?.*?\.com\/)(\s+[\w-]*\s+)(https?.*?\.com\/[\w\.]+)

  • (https?.*?\.com\/) Первая группа захвата. Захват http или https, все до .com и косой черты /.
  • (\s+[\w-]*\s+) Вторая группа захвата. Захват пробелов, буквенно-цифровых символов и подстановок, а также пробелов. Вы можете добавить больше символов в набор символов, если это необходимо.
  • (https?.*?\.com\/[\w\.]+) Третья группа захвата. Захватите http или https, все до .com, косую черту /, буквенно-цифровые символы и полную остановку . для расширения. Снова вы можете добавить больше символов в набор символов в этой группе захвата, если вы ожидаете других символов.

Вы можете протестировать регулярное выражение здесь .

В качестве альтернативы, если вы ожидаете переменные URL-адреса и домены, которые вы можете использовать:

(\w*\:.*?\.\w*\/)(\s+[\w-]*\s+)(\w*\:?.*?\.\w*\/[\w\.]+)

Где первая и третья группы захвата теперь соответствуют любым буквенно-цифровым символам, за которыми следует двоеточие : и все до ., буквенно-цифровые символы \w и косую черту. Вы можете проверить это здесь .

Вы можете заменить захваченные группы:

<a href="\1">\1</a>\2<img src="\3">

Где \1, \2 и \3 являются обратными ссылками на захваченные группы один, два и три соответственно.


Фрагмент питона:

>>import re
>>str = "La-la-la https://example.com/ la-la-la https://example.com/example.PNG"

>>out = re.sub(r'(https?.*?\.com\/)(\s+[\w-]*\s+)(https?.*?\.com\/[\w\.]+)',
       r'<a href="\1">\1</a>\2<img src="\3">',
       str)
>>print(out)
La-la-la <a href="https://example.com/">https://example.com/</a> la-la-la <img src="https://example.com/example.PNG">
1
ответ дан UnbearableLightness 17 August 2018 в 12:38
поделиться
  • 1
    Последовательность текста и ссылок не определена и непредсказуема, это может быть не только .com, не только .httpS и т. Д. :) – MaxCore 13 July 2018 в 14:40
  • 2
    Правильно, попробуйте (\w*\:.*?\.\w*\/)(\s+[\w-]*\s+)(\w*\:?.*?\.\w*\/[\w\.]+) здесь . Если это решение не сработает для вас, можете ли вы привести примеры, которые вызывают это последнее регулярное выражение? – UnbearableLightness 13 July 2018 в 14:44
Другие вопросы по тегам:

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