В Sublime Text, как найти и заменить все некодированные веб-адреса отформатированными и связанными URL-адресами?

Как найти и заменить все некодированные веб-адреса отформатированными и связанными URL-адресами?

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

Пример:

`ДО:

   Dummy text. website.dk/info
   Dummy text (website.com) Dummy text.
   Dummy text. website.dk
   Dummy text. www.website.com

ПОСЛЕ:

   Dummy text. <em><a href="http://website.dk/info" target="blank">website.dk/info</a></em>
   Dummy text (<em><a href="http://website.com" target="blank">website.com</a></em>) dummy text.
   Dummy text. <em><a href="http://website.dk" target="blank">website.dk</a></em>
   Dummy text. <em><a href="http://website.com" target="blank">www.website.com</a></em>` 

2 ответа

Предполагая, что "до" это только список URL-адресов:

  1. Найти> Заменить...
  2. Нажмите .* включить регулярное выражение
  3. Войти (.+) в "Найти что"
  4. Войти <em><a href="http://\1" target="blank">\1</a></em> в "Заменить на"
  5. Нажмите "Заменить все"

Если "до" не все URL, "Найти что" будет сложнее.


Согласно комментариям, здесь есть (хакерский) подход Python.

file.html

<html>
<body>
  <p>
    Dummy text. website.dk/info
    Dummy text (website.com) Dummy text.
    Dummy text. website.dk
    Dummy text. www.website.com
  </p>
  <p>
    Dummy text. <em><a href="http://website.dk/info" target="blank">website.dk/info</a></em>
    Dummy text (<em><a href="http://website.com" target="blank">website.com</a></em>) dummy text.
    Dummy text. <em><a href="http://website.dk" target="blank">website.dk</a></em>
    Dummy text. <em><a href="http://website.com" target="blank">www.website.com</a></em>
  </p>
</body>
</html>

link_links.py

import re;

def link_links(m):
  # Link all links.
  return re.sub(
    # Experiment with this pattern; e.g., search for "URL regex".
    r'(?<=\W)((?:www\.)?\w+\.\w+(?:\/\S+)*)',
    '<em><a href="http://\\1" target="blank">\1</a></em>',
    m.group(0)
  )

with open("file.html", "r") as html:
  match_non_html_re = re.compile(r'''
    (?<=>) # After a closing HTML tag
    [^<]+ # Match all non-HTML
    (?=<) # Ensure it is followed by an opening HTML tag (since we cannot use atomic grouping)
    (?!<\/a>) # Ensure we were not within a link tag already
  ''', re.VERBOSE)
  print re.sub(match_non_html_re, link_links, html.read())

Предполагая, что у вас есть больше текста, который не является ссылками, вы можете использовать регулярное выражение, например:

((?:www\.)?\w+\.?\w+\/?\w+)

С этой строкой замены

<em><a href="http://$1" target="blank">$1</a></em>

Рабочая демонстрация

Другие вопросы по тегам