QString и QRegExp |
Здравствуйте, гость ( Вход | Регистрация )
QString и QRegExp |
Rosster |
1.9.2011, 9:42
Сообщение
#1
|
Студент Группа: Участник Сообщений: 33 Регистрация: 23.11.2009 Пользователь №: 1254 Спасибо сказали: 0 раз(а) Репутация: 0 |
Следующая проблема:
Есть QString str = "1234567890123 01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург"; мне нужно выдрать 3 группы слов: 1)1234567890123 - оно может иметь <=13 цифр 2)01.02.03 - год может иметь и 4 цифры 3)остальная часть после даты. Пытаюсь реализовать это с помощью QRegExp и QString::split() и QString::section(). Никак не могу отловить правильную комбинацию. Странно что в QString есть contains(), но нету выборки из текста заданных QRegExp выражением. Буду благодарен за содействие в решении проблемы) |
|
|
silver47 |
1.9.2011, 10:35
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Если позиции элементов всегда одинаковы, то логично же, читать первый блок до первого пробела.. читать второй блок до второго и все остальное.
|
|
|
Rosster |
1.9.2011, 11:26
Сообщение
#3
|
Студент Группа: Участник Сообщений: 33 Регистрация: 23.11.2009 Пользователь №: 1254 Спасибо сказали: 0 раз(а) Репутация: 0 |
Если позиции элементов всегда одинаковы, то логично же, читать первый блок до первого пробела.. читать второй блок до второго и все остальное. Эти три группы могут быть в разном порядке, в этом вся и сложность. Просто надо как-то написать выборку 13 цифр и меньше, даты, и остальное что есть в строке |
|
|
RazrFalcon |
1.9.2011, 12:10
Сообщение
#4
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Худший, наверное, способ:
Вывод:
UPD: поправил выражения. Сообщение отредактировал RazrFalcon - 1.9.2011, 12:22 |
|
|
Rosster |
1.9.2011, 13:08
Сообщение
#5
|
Студент Группа: Участник Сообщений: 33 Регистрация: 23.11.2009 Пользователь №: 1254 Спасибо сказали: 0 раз(а) Репутация: 0 |
Нашел способ, но тоже не идеальный, если учитывать, что расположение 3 групп разное.
Если оно статичное, то считаю лучшее решение (может кому пригодится):
Если допустим будет строка "01.02.03г. По Красногвардейскому р-ну г.Санкт-Петербург 1234567890123" то нужно просто поменять местами в регулярном выражении на "([0-9]{2}\\.[0-9]{2}\\.[0-9]{2,4})(?:\.*)([0-9]{6,13})" Все) Тему можно закрывать, решение найдено, спасибо всем. |
|
|
Текстовая версия | Сейчас: 28.1.2025, 20:44 |