kate - regex - найти и заменить часть URL с href на "›

У меня есть много ссылок, содержащихся в файлах .html и .txt, которые я хотел бы изменить. Я в основном использую Кейт в качестве текстового редактора, поэтому я задал этот вопрос с помощью тега kate. Ниже приведен образец ссылок:

<li>
  <a href="http://sk1project.org/">
            sK1
        </a> is an open source vector graphics editor similar to CorelDRAW, Adobe Illustrator, or Freehand. First of all sK1 is oriented for PostScript processing. UniConvertor is a universal vector graphics translator. It uses sK1 engine to convert
  one format to another. Development of the import/export modules for this program goes through different stages, quality and feature coverage are different among formats.
</li>


<li>
  <a href="http://tango.freedesktop.org/Tango_Desktop_Project">
            The Tango Desktop Project
        </a> exists to help create a consistent graphical user interface experience for free and Open Source software. While the look and feel of an application is determined by many individual components, some organization is necessary in order to
  unify the appearance and structure of individual icon sets used within those components. The Tango Desktop Project defines an icon style guideline to which artists and designers can adhere. A sample implementation of the style is available as an icon
  theme based upon a standardized icon naming specification. In addition, the project provides transitional utilities to assist in creating icon themes for existing desktop environments, such as GNOME and KDE.
</li>

Я нашел Регулярное выражение для извлечения URL-адреса из ссылки HTML | python - Регулярное выражение для извлечения URL из ссылки HTML - Stack Overflow, поэтому я знаю, как записать текст от href до "> с помощью href=[\'"]?([^\'" >]+">), но я не знаю, как сохранить текст от href до" до> и добавьте следующий текст: 'rel = "nofollow noopener noreferrer">'.

Вот как должен выглядеть конечный результат:

<li>
  <a href="http://sk1project.org/" rel="nofollow noopener noreferrer">
            sK1
        </a> is an open source vector graphics editor similar to CorelDRAW, Adobe Illustrator, or Freehand. First of all sK1 is oriented for PostScript processing. UniConvertor is a universal vector graphics translator. It uses sK1 engine to convert
  one format to another. Development of the import/export modules for this program goes through different stages, quality and feature coverage are different among formats.
</li>


<li>
  <a href="http://tango.freedesktop.org/Tango_Desktop_Project" rel="nofollow noopener noreferrer">
            The Tango Desktop Project
        </a> exists to help create a consistent graphical user interface experience for free and Open Source software. While the look and feel of an application is determined by many individual components, some organization is necessary in order to
  unify the appearance and structure of individual icon sets used within those components. The Tango Desktop Project defines an icon style guideline to which artists and designers can adhere. A sample implementation of the style is available as an icon
  theme based upon a standardized icon naming specification. In addition, the project provides transitional utilities to assist in creating icon themes for existing desktop environments, such as GNOME and KDE
</li>

Как это можно сделать с помощью регулярного выражения в Кейт?

Спасибо.


person iembry    schedule 15.03.2019    source источник
comment
I found Regular expression to extract URL from an HTML link Нет, ты нашел хлам!   -  person    schedule 15.03.2019


Ответы (1)


Разбор html с использованием регулярного выражения не рекомендуется, но, поскольку вы используете редактор Kate, вы можете захватить тег <a с атрибутом href, используя это регулярное выражение,

(<a\s+.*?href=(['"]?)\S*\2)

И замените это на это,

\1 rel="nofollow noopener noreferrer"

Я никогда не пользовался редактором Kate, поэтому не уверен, будет ли \1 работать или $1

Сообщите мне, если это сработает.

Демо

person Pushpesh Kumar Rajwanshi    schedule 15.03.2019
comment
@sln: Что плохого? Можете ли вы объяснить на практическом примере, почему OP не может сопоставить здесь тег <a? Имейте в виду, что OP использует редактор. Какое решение вы здесь предлагаете? - person Pushpesh Kumar Rajwanshi; 15.03.2019
comment
Конечно. Допустимые теги html не допускают использование кавычек внутри кавычек. И вы на самом деле не сопоставляете атрибут внутри тега html. См. Ссылку, которую я разместил. Я могу дать вам верный способ сделать это, но вы этого не поймете. - person ; 15.03.2019
comment
Вы можете взглянуть на этот regex101.com/r/OXLAV9/1. Если возникнут вопросы, дайте мне знать. - person ; 15.03.2019
comment
@sln: Где в мире вы получаете такие URL-адреса, которые содержат кавычки в URL-адресах? Какие, по вашему мнению, недопустимые в URL-адресах? Также помните, что существует большая разница в сопоставлении и проверке. Дело не в том, что у OP есть поле, которое нужно проверить только с помощью действительного URL-адреса, введенного пользователем. Вместо этого все, что хочет OP, - это просто сопоставить URL-адрес и иметь в нем этот дополнительный атрибут. - person Pushpesh Kumar Rajwanshi; 15.03.2019
comment
@sln: ваше регулярное выражение излишне сложно и вообще не нужно, плюс соответствует недопустимому тегу <::::::::::: href="http://sk1project.org/"> Отметьте это < / а> - person Pushpesh Kumar Rajwanshi; 15.03.2019
comment
Это не имеет ничего общего с URL-адресом, который может существовать как контент. Это связано с получением атрибута href. Для этого вам нужно разобрать тег. - person ; 15.03.2019
comment
::::::::::: - допустимое имя тега! Скинуть в браузер. - person ; 15.03.2019
comment
В любом случае [\w:] - это просто уловка. W3C - это действительно дерьмовая куча символов Unicode. Я могу дать вам их, если вы захотите использовать это вместо этого. - person ; 15.03.2019
comment
@sln: OP говорит о сопоставлении тега <a, который содержит атрибут href, тогда зачем предлагать ему такие имена тегов, как :::::? Я не знаю, разрешает ли w3c :::::: в качестве имени тега или нет, но я никогда не видел такого имени тега, и было бы действительно глупо использовать :::::: в качестве имени тега для представления ссылок на html-странице. Пожалуйста, прочтите сообщение OP внимательно и посмотрите, о чем он говорит. И заходите на страницу обсуждения, я вас пригласил вместо того, чтобы проливать сюда масло :) - person Pushpesh Kumar Rajwanshi; 15.03.2019
comment
@sln: у вашего регулярного выражения действительно есть еще больше проблем с соответствием. Ваше регулярное выражение даже не работает для <a href=http://sk1project.org/>, где нет одинарных или двойных кавычек, окружающих значение атрибута href. И ваше регулярное выражение ведет себя странно и улавливает непредусмотренный текст, когда значение href содержит двойные кавычки. Отметьте это И даже ваше регулярное выражение захватывает одиночные кавычки в значении атрибута href. Мне интересно, что вы на самом деле пытались сделать? - person Pushpesh Kumar Rajwanshi; 15.03.2019
comment
Я здесь не для того, чтобы внимательно прочитать сообщение ОП. Я потратил 2 секунды на чтение, пока не понял, что это было целиком. Я здесь, чтобы показать вам ошибку в вашем приятеле с регулярным выражением !! - person ; 15.03.2019
comment
@sln: Мое решение хорошо работает для примеров OP и любого такого подлинно выглядящего html, содержащего теги <a, и, как я уже сказал, OP пытается сопоставить, а не проверять, оба из которых являются двумя совершенно разными упражнениями, и они довольно хорошо работают для сопоставления и давая ожидаемый результат, как хотел OP. Давайте проведем нашу дискуссию в чате, так как нефть здесь проливать нехорошо. Ответьте мне в чате, пожалуйста, и больше здесь сообщений не пишите. - person Pushpesh Kumar Rajwanshi; 16.03.2019
comment
Ваше решение - мусор, вы не знаете, джек !! И href=http://sk1project.org не атрибут / значение, ни href = http://sk1project.org - person ; 16.03.2019
comment
@Pushpesh Kumar Rajwanshi Ответ, который вы предоставили, сработал для меня в текстовом редакторе Кейт. Спасибо. - person iembry; 20.03.2019
comment
@iembry: Я так рад, что мое решение сработало для вас. Дайте мне знать, если у вас возникнут какие-либо проблемы позже в любое время. - person Pushpesh Kumar Rajwanshi; 20.03.2019