crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Удаление скобок, с содержимым
RazrFalcon
  опции профиля:
сообщение 8.12.2011, 12:12
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Примеры:
[1234][1234]text[1234][1234]
[1234] [1234] text [1234] [1234]
[1234][1234] text [1234][1234]
etc.

Во всех случаях должен остаться только text. Все что в скобках и сами скобки нужно удалить.

Какие есть варианты?
Сейчас использую QRegExp, но думаю есть более простые способы.
    QString name("[1234][1234] text [1234][1234]");
    name.remove(QRegExp(" \\[.*\\]")); // may be ' \\[.*\\]$'
    QRegExp rx1("\\[.*\\]$");
    int pos1 = 0;
    QString rmStr;
    while (pos1 >= 0) {
        pos1 = rx1.indexIn(name,pos1);
        if (pos1 >= 0) {
            ++pos1;
        }
        qDebug()<<rx1.capturedTexts();
        QString tmpStr = rx1.capturedTexts().first();
        if (!tmpStr.isEmpty() && tmpStr.count() > rmStr.count() && tmpStr != name)
            rmStr = rx1.capturedTexts().first();
    }
    name.remove(rmStr);
    name.remove(QRegExp("\\[.*\\]"));
    qDebug()<<name;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
RazrFalcon
  опции профиля:
сообщение 8.12.2011, 18:12
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


QString Parcer::bracketsRemove(QString &name)
{
    QRegExp rx("\\[.*\\]|\\(.*\\)");
    int pos = 0;
    // find all [text] and (text)
    while (name.contains(QRegExp("\\[.*\\]|\\(.*\\)"))) {
        pos = 0;
        QString rmStr;
        // find last brackets
        while (pos >= 0) {
            pos = rx.indexIn(name,pos);
            if (pos >= 0) {
                ++pos;
            }
            QString tmpStr = rx.capturedTexts().first();
            if (!tmpStr.isEmpty())
                rmStr = tmpStr;
        }
        // remove finded brackets from base name
        name.remove(rmStr);
    }
    // remove rest of brackets
    name.remove(QRegExp("\\[|\\]|\\(|\\)"));
    return name;
}

Вот как сейчас работает. И работает как надо. Но это мой вариант решения. Может есть проще.
В скобках может быть что угодно, вообще без ограничений. Что я и реализовал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 2:44