crossplatform.ru

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


  Ответ в QString и QRegExp
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Rosster Дата 1.9.2011, 13:08
  Нашел способ, но тоже не идеальный, если учитывать, что расположение 3 групп разное.
Если оно статичное, то считаю лучшее решение (может кому пригодится):

QString str = "1234567890123 01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург";
QRegExp exp("([0-9]{6,13})(?:\.*)([0-9]{2}\\.[0-9]{2}\\.[0-9]{2,4})");
int pos = exp.indexIn(ogrn);
if(pos != -1
{
        qDebug() << exp.cap(1); //1234567890123
        qDebug() << exp.cap(2); //01.02.03
}
QString address = str.remove(exp);
if(address.left(2) == "г.")
        address.remove(0, 2); //По Красногвардейскому р-ну г.Санкт-Петербург

Если допустим будет строка "01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург 1234567890123"
то нужно просто поменять местами в регулярном выражении на "([0-9]{2}\\.[0-9]{2}\\.[0-9]{2,4})(?:\.*)([0-9]{6,13})"

Все)
Тему можно закрывать, решение найдено, спасибо всем.
RazrFalcon Дата 1.9.2011, 12:10
  Худший, наверное, способ:
  //QString str = "1234567890123 01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург";
  QString str = "По Красногвардейскому р-ну г.Санкт-Петербург 1234567890123 01.02.03г.";
  //QString str = "01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург 1234567890123";

  QRegExp numReg("[0-9]{3,13}");
  QRegExp yearReg("[0-9][0-9]\\.[0-9][0-9]\\.[0-9][0-9].\\.");

  //qDebug()<<str.remove(numReg);

  QString address = str;
  address.remove(numReg);
  address.remove(yearReg);
  qDebug()<<address.remove(QRegExp("^[ ]*|[ ]$")); //удаляем лишние пробелы

  QString year = str;
  year.remove(address);
  year.remove(numReg);
  year.remove(QRegExp("[ ]*")); //удаляем лишние пробелы
  qDebug()<<year;

  QString nums = str;
  nums.remove(address);
  nums.remove(year);
  nums.remove(QRegExp("[ ]*")); //удаляем лишние пробелы
  qDebug()<<nums;

Вывод:
"По Красногвардейскому р-ну г.Санкт-Петербург" 
"01.02.03г."
"1234567890123"


UPD: поправил выражения.
Rosster Дата 1.9.2011, 11:26
 
Цитата(silver47 @ 1.9.2011, 10:35) *
Если позиции элементов всегда одинаковы, то логично же, читать первый блок до первого пробела.. читать второй блок до второго и все остальное.

Эти три группы могут быть в разном порядке, в этом вся и сложность.
Просто надо как-то написать выборку 13 цифр и меньше, даты, и остальное что есть в строке
silver47 Дата 1.9.2011, 10:35
  Если позиции элементов всегда одинаковы, то логично же, читать первый блок до первого пробела.. читать второй блок до второго и все остальное.
Rosster Дата 1.9.2011, 9:42
  Следующая проблема:
Есть QString str = "1234567890123 01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург";
мне нужно выдрать 3 группы слов:
1)1234567890123 - оно может иметь <=13 цифр
2)01.02.03 - год может иметь и 4 цифры
3)остальная часть после даты.
Пытаюсь реализовать это с помощью QRegExp и QString::split() и QString::section(). Никак не могу отловить правильную комбинацию.
Странно что в QString есть contains(), но нету выборки из текста заданных QRegExp выражением.
Буду благодарен за содействие в решении проблемы)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 26.6.2019, 21:40