Удаление тегов — регулярное выражение (регулярное выражение)

#html #regex

#HTML #регулярное выражение

Вопрос:

У меня есть некоторый HTML, и требуется удалить только начальные <p> теги из строки.

Пример:

 input: <p style="display:inline; margin: 40pt;"><span style="font:XXXX;"> Text1 Here</span></p><p style="margin: 50pt"><span style="font:XXXX">Text2 Here</span></p> <p style="display:inline; margin: 40pt;"><span style="font:XXXX;"> Text3 Here</span></p>the string goes on like that

desired output: <span style="font:XXXX;"> Text1 Here</span></p><span style="font:XXXX">Text2 Here</span></p><span style="font:XXXX;"> Text3 Here</span></p>
  

Возможно ли это с помощью регулярных выражений? Я пробовал некоторые комбинации, но не работает. Это все одна строка. Любой совет приветствуется.

Комментарии:

1. Какой вариант регулярного выражения? JavaScript, PCRE, python?

2. Если вы удалили начальный <p> тег, я думаю, вы хотите удалить закрытие </p> , а также сформировать желаемый результат.

Ответ №1:

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

Вариант 1: оставить закрывающие </p> теги

Этот первый вариант оставляет закрывающие </p> теги, но это то, что показывает ваш желаемый результат. 🙂 Вариант 2 также удалит их.

PHP

 $replaced = preg_replace('~<p[^>]*>~', '', $yourstring);
  

JavaScript

 replaced = yourstring.replace(/<p[^>]*>/g, "");
  

Python

 replaced = re.sub("<p[^>]*>", "", yourstring)
  
  • <p соответствует началу тега
  • Отрицательный символьный класс [^>]* соответствует любому символу, который не является закрывающим >
  • > закрывает совпадение
  • мы заменяем все это пустой строкой

Вариант 2: также удаление закрывающих </p> тегов

PHP

 $replaced = preg_replace('~</?p[^>]*>~', '', $yourstring);
  

JavaScript

 replaced = yourstring.replace(/</?p[^>]*>/g, "");
  

Python

 replaced = re.sub("</?p[^>]*>", "", yourstring)
  

Комментарии:

1. как насчет закрытия </p> тега? Я думаю, что OP этого не хочет. </p> Также удалить из вывода. OP говорит: удалите только начальные теги из строки.

2. @Braj Как уже упоминалось, посмотрите на его желаемый результат. Он сохраняет теги </p>. 🙂

3. К вашему сведению, добавлен второй вариант на случай, если вы также хотите удалить закрывающие теги </p> .

4. @Braj Хорошо, добавлена опция для этого… Приветствия!

5. 1 Хороший ответ для рассмотрения всех языков и тестовых примеров.

Ответ №2:

Это выражение PCRE:

 /<p( *w =("[^"]*"|'[^']'|[^ >]))*>(.*</p>)/Ug
  

Замените каждое вхождение на $ 3 или просто удалите все вхождения:

 /<p( *w =("[^"]*"|'[^']'|[^ >]))*>/g
  

Если вы хотите также удалить закрывающий тег:

 /<p( *w =("[^"]*"|'[^']'|[^ >]))*>(.*)</p>/Ug