В строке добавьте каждый HTML-элемент с некоторым свойством в новый произвольный элемент с произвольным значением для произвольного свойства

#java #mapping

#java #сопоставление

Вопрос:

У меня есть строка, которая содержит этот HTML-код:

 abc <h1><div style="color: rgb(190, 6, 6);">ABC <span style="color: rgb(0, 255, 6);">DEF</span></div></h1>
  

Моя программа должна определить, что color было использовано, чтобы она автоматически добавляла элемент ( div и span ) каждый в новый элемент font . Это должно работать, даже если есть несколько элементов, каждый из которых содержит color правило, в строке, где слева или справа добавлены другие HTML-элементы.

Как я мог это сделать?

Приведенный выше код станет:

 abc <h1><font color="rgb(190, 6, 6)"><div style="color: rgb(190, 6, 6);">ABC <font color="rgb(0, 255, 6);"><span style="color: rgb(0, 255, 6);">DEF</span></font></div></font></h1>
  

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

1. Что вы пробовали до сих пор? Вы пробовали использовать регулярное выражение для поиска и замены?

2. Привет, Хари, я думал, что смогу обнаружить первое «<«, появляющееся перед словом «color», которого нет между двойными кавычками. Таким образом, я смогу идентифицировать открывающий тег. Для html-элементов без конечного тега этого было бы достаточно. Но для элементов htm с начальными и конечными тегами это не так. То, что я хочу сделать, кажется довольно сложным. Я думал, что есть какой-то API или другой.

Ответ №1:

Используйте это регулярное выражение для поиска и замены

 pattern = "(<div[s] style=")(color:[s] rgb([d] , [d] , [d] ))"

replace by "<font color="$2">$1"$2"
  

Это работает для div. Аналогично вы можете сделать это для span

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

1. Принимаете ли вы во внимание конечный тег, связанный с этим открывающим? Возможно, я ошибаюсь, но я этого не вижу.

2. Я не учел конечный тег. конечно, чтобы сделать его более точным, вы можете добавить это также

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

4. Кстати, я пробую JSoup. Я думаю, это решит проблему эффективнее, чем все, что мы могли бы изобрести :). Я опубликую свой ответ, если то, что я пытаюсь сделать, сработает.