Я протестировал это в jEdit (который также написан на Java, как NetBeans, но у меня нет доступа к NetBeans в настоящее время). Попробуйте это для шаблона регулярных выражений:
(?<=<section>)(\s*)<p><b>([^<]+)</b></p>
с этим используется в качестве замены:
$1<h2>$2</h2>
Шаблон регулярного выражения говорит «соответствует последовательности, которой предшествует <section> и которая начинается с любого количества пробелов (которое сохраняется как группа захвата 1), а затем содержит <p><b> за которым следует по крайней мере один символ, который не является < (и сохраните эти символы как группу захвата 2) и заканчивается на </b></p> ".
Шаблон замены просто говорит «начните с пробела из группы захвата 1, затем выведите <h2> затем символы из группы захвата 2, которые были найдены внутри элемента <b> , затем выведите </h2> ». Захват и вывод пробела означает, что ваш новый элемент h2 будет начинаться с тех же новых строк и вкладок, что и элемент p, поэтому любое красивое форматирование не будет разрушено этим изменением.
Просто имейте в виду, что регулярное выражение не может знать, где оно находится относительно структуры DOM, поэтому оно не может знать, правильно ли использовать h1, h2, h3, h4 и так далее. Но если вам когда-нибудь понадобится <h2> тогда попробуйте.
(На самом деле, если вы используете HTML5, тогда вы можете начинать каждый новый элемент раздела с элемента <h1> или с любого другого начального номера на самом деле, и для автоматической обработки уровней заголовка требуется совместимый браузер.)