Russian Qt Forum
Ноябрь 24, 2024, 20:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как с помощью регулярных выражений удалить тег с атрибутами?  (Прочитано 4492 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Июнь 02, 2016, 00:02 »

Доброй ночи, форумчанам. Я работаю с файлами html-справки, которые создавались ранее другими людьми в Microsoft Word-е, в результате чего в разметке страницы появилось множество тегов <span> типа: <span аргументы="">Текст</span>. Мне необходимо достать сам текст. Решил просто используя регулярное выражение просто удалить тег <span>. Но пока не знаю как правильно записать регулярное выражение, чтобы удалился открывающий тег  с внутренними аргументами и закрывающий тег, а текст остался. Пробовал следующим образом:
Код:
QString str = "<span ang=RU style='mso-ansi-language:RU'>Текст</span>";
str = str.remove(QRegExp("<span(.*)>")).remove(QRegExp("</span>"));
увы не сработало.
Решил тогда загонять текст в QTextDocument и пользуясь методом toPlainText() убирать теги, но в случаи с тегом <span> текст тоже удаляется. Злой

Может кто уже решал подобную задачу?
 
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июнь 02, 2016, 01:18 »

Замену / replace делать? Т.е. ищем '<span.*>(.+)</span>' и все выражение заменяем на то, что находится в круглых скобках.
Я эту идею, когда сейчас придумал проверил на питоне и это работает:

Код
Python
>>> str = "<br><span ang=RU style='mso-ansi-language:RU'>Текст</span><hr>"
>>> import re
>>> re.sub('<span.*>(.+)</span>', '\\1', str)
'<br>Текст<hr>'
Записан

billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #2 : Июнь 02, 2016, 08:10 »

Код
Python
>>> str = "<br><span ang=RU style='mso-ansi-language:RU'>Текст</span><hr>"
>>> import re
>>> re.sub('<span.*>(.+)</span>', '\\1', str)
'<br>Текст<hr>'
Спасибо за ответ.
Вот только import никогда не использовал в qt, его не видет, может нужно какую-нибудь библиотеку подключать. В справке находит
только тот import, что в QML.
« Последнее редактирование: Июнь 02, 2016, 08:53 от billy4685 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 02, 2016, 08:16 »

А если будет вложенный тег span ?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Июнь 02, 2016, 09:10 »

Цитировать
Я эту идею, когда сейчас придумал проверил на питоне и это работает:

Код
Python
>>> str = "<br><span ang=RU style='mso-ansi-language:RU'>Текст</span><hr>"
>>> import re
>>> re.sub('<span.*>(.+)</span>', '\\1', str)
'<br>Текст<hr>'
Спасибо за ответ.
Вот только import никогда не использовал в qt, его не видет, может нужно какую-нибудь библиотеку подключать. В справке находит
только тот import, что в QML.

Используйте регулярку и алгоритм
Записан

billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #5 : Июнь 02, 2016, 10:11 »

gil9red, спасибо за ответ. Сделал следующим образом:
Код:
  QString temp;
  QString str = "<span\r\nlang=RU style='mso-ansi-language:RU'>Текст </span>";
  int pos = 0;
  QRegExp reg_exp("<span.*>(.+)</span>");

  while((pos = reg_exp.indexIn(str, pos)) != -1)
  {
temp = reg_exp.cap(1);
pos += reg_exp.matchedLength();
  }
  str = temp;
  qDebug() << str;
Но со вложенностями и несколькома тегами <span>, нужно будет как-то реализовывать другим образом.
Записан
Bepec
Гость
« Ответ #6 : Июнь 02, 2016, 10:54 »

Парсинг и разбор html'я надо делать для вложенных тегов. По другому не получится Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.078 секунд. Запросов: 22.