LINUX.ORG.RU

Как заменить неизвестное заранее число вхождений в QRegExp

 , ,


0

1

Есть многострочный HTML-текст (по сути, валидный XML), в котором могут встречаться такие конструкции:

<span разные_атрибуты>  </span>
<span разные_атрибуты>    </span>
<span разные_атрибуты> </span>


Да, это именно «пробельный» текст с разным количеством пробелов.

Задача: заменить все такие вхождения на такие:

<span разные_атрибуты>&#65533;&#65533;</span>
<span разные_атрибуты>&#65533;&#65533;&#65533;&#65533;</span>
<span разные_атрибуты>&#65533;</span>


В других местах заменять пробелы на «&#65533;» не требуется.

Обрабатывать нужно именно регулярными выражениями. Потому что, например, парсинг в DOM (с последующим обратным преобразованием) не сделает текстовую ноду из одних пробелов внутри ноды span.

Вопрос: как это сделать регулярками? Вот заготовка:

QRegExp replaceSpaceTagsEx("<span.*>(\\s*)</span>");
replaceSpaceTagsEx.setMinimal(true);
htmlCode.replace(replaceSpaceTagsEx, "?????");


Что надо прописать вместо знаков вопроса? Или надо делать как-то по-другому?

★★★★★

Потому что, например, парсинг в DOM (с последующим обратным преобразованием) не сделает текстовую ноду из одних пробелов внутри ноды span.

Смотря какой парсер. В pugixml, например, сделает.

annulen ★★★★★
()

Обрабатывать нужно именно регулярными выражениями. Потому что, например, парсинг в DOM

Теперь у тебя две проблемы :D

Про stream parser'ы не слышал?

invy ★★★★★
()
Ответ на: комментарий от invy

Про stream parser'ы не слышал?

Использовал miniXML, но это было весьма давно.

В Qt QXmlStreamReader не пользовал, и у меня нет уверенности в том, что он в отличие от QDomDocument, сможет не пропустить пустую текстовую ноду.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Стрим парсер обычно не знает что будет дальше. Даже по сути его парсером нельзя назвать. Лексер правильнее.

invy ★★★★★
()

А xml:space=«preserve» поставщик данных не может выплёвывать?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.