Следующая проблема:
Есть QString str = "1234567890123 01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург";
мне нужно выдрать 3 группы слов:
1)1234567890123 - оно может иметь <=13 цифр
2)01.02.03 - год может иметь и 4 цифры
3)остальная часть после даты.
Пытаюсь реализовать это с помощью QRegExp и QString::split() и QString::section(). Никак не могу отловить правильную комбинацию.
Странно что в QString есть contains(), но нету выборки из текста заданных QRegExp выражением.
Буду благодарен за содействие в решении проблемы)
Если позиции элементов всегда одинаковы, то логично же, читать первый блок до первого пробела.. читать второй блок до второго и все остальное.
Худший, наверное, способ:
//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"
Нашел способ, но тоже не идеальный, если учитывать, что расположение 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); //По Красногвардейскому р-ну г.Санкт-Петербург
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)