Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выборка по ключевым словам
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Ponter
Всем привет, подскажите, пожалуйста, как в строке, например:
"Введите в поле код <pod>kod_value</pod> для <pod>two_kod</pod> сохранения"
Выдрать отдельно два QStringList ("Введите в поле код ", "для" "сохранения") и ("kod_value" и "two_kod") ?
Пытался сделать через регулярное выражение и split, но не получается...есть идеи какие-нибудь?
Litkevich Yuriy
Я думаю, тут в два захода надо делать.
Такую регулярку взять за основу:
<pod>.*</pod>
сделать её не жадной.
Эта регулярка будет соответствовать:
<pod>kod_value</pod>
<pod>two_kod</pod>

И её использовать в функции split. Соответственно получишь:
Введите в поле код
для
сохранения


А за второй заход выделять то, что внутри тэгов
Ponter
Цитата(Litkevich Yuriy @ 3.3.2010, 13:34) *
<pod>.*</pod>
сделать её не жадной.
Эта регулярка будет соответствовать:
<pod>kod_value</pod>
<pod>two_kod</pod>

И её использовать в функции split.

Пишу QStringList txtList = txt_text->toPlainText().split(QRegExp("<pod>*.</pod>"));
получается txtList имеет один элемент, это вся строка которая рассматривается,не выходит:(
kwisp
можно еще воспользоваться
QRegExp::cap(int n)
следующим образом, к примеру:
QRegExp reg("(.+)<pod>(.+)</pod>(.+)<pod>(.+)</pod>(.+)");
while((int pos = reg.indexIn(str,0))!=-1) {
strL1.append(reg.cap(1));
strL1.append(reg.cap(3));
strL1.append(reg.cap(5));
strL2.append(reg.cap(2));
strL2.append(reg.cap(4));
}
Ponter
Ошибся. Вот так написал:
QStringList txtList = txt_text->toPlainText().split(QRegExp("<var>.*</var>"));
и вывелось "Введите в поле код "и все

Ponter
kwisp, это не подходит, потому что этих <pod> может быть сколько угодно.
Можете подсказать регулярные выражения для обоих случаев для выборки простого текста и внутри тегов.
<pod>.*</pod> для первого случая не подходит

Litkevich Yuriy
Ponter
ты забыл:
Цитата(Litkevich Yuriy @ 3.3.2010, 16:34) *
сделать её не жадной.
kwisp
ясно.
я пример привел, относительно первого поста. выже не сказали что <pod> может быть сколько угодно.
вам уже подсказали QRegExp::setMinimal()


Цитата(Гость_Ponter_* @ 3.3.2010, 14:37) *
kwisp, это не подходит, потому что этих <pod> может быть сколько угодно.

подойдёт с небольшим изменением.
описываю регулярку словами, скорее всего в коде ошибусь. всё от начала строки или "</pod>" до "<pod>" затем всё до конца строки либо "</pod>"
QRegExp reg("(^\|(</pod>))(.+)<pod>(.+)((</pod>)\|$)");
while((int pos = reg.indexIn(str,0))!=-1)  {
strL1.append(reg.cap(3));// не уверен на счет 3
strL2.append(reg.cap(4));
}

всё равно в регулярке "ошибся" последнее слово не схавает.
минутку

можно так попробовать
QRexExp reg("(<pod>)\|(</pod>)");
QStringList strL = str.split(reg);

если начало строки не <pod> то нечетные элементы списка это элементы первого списка, четные это элементы второго. :)
|| так
QRexExp reg("</?pod>");
QStringList strL = str.split(reg);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.