![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Tonal |
![]()
Сообщение
#21
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
1) Составляем выражение, которое найдёт последовательность символов которую нужно оставить:
[\d.]+[WC]?_O(N|FF)\b Кстати, минус у чисел может быть? И ещё куда-то нужно запятую присобачить - из примера не видно. 2) Создаём QRegExp с этим выражением. 3) Для исходной строки ищем все вхождения и собираем из них выходящую строку. Вот реализация на python-е:
Думаю перевести на С++ труда не составит? ![]() П.С. Приведённое выражение поймает и такую последовательность: 1.2.3.4.5._ON Непонятно нужно ли с этим бороться... Сообщение отредактировал Tonal - 30.8.2008, 0:12 |
|
|
AD |
![]()
Сообщение
#22
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
1) Составляем выражение, которое найдёт последовательность символов которую нужно оставить: [\d.]+[WC]?_O(N|FF)\b Кстати, минус у чисел может быть? И ещё куда-то нужно запятую присобачить - из примера не видно. 2) Создаём QRegExp с этим выражением. 3) Для исходной строки ищем все вхождения и собираем из них выходящую строку. Вот реализация на python-е:
Думаю перевести на С++ труда не составит? ![]() П.С. Приведённое выражение поймает и такую последовательность: 1.2.3.4.5._ON Непонятно нужно ли с этим бороться... Спасибо! ![]() Либо точка, либо запятая. Приведенное выражение вполне правильное! ![]() |
|
|
AD |
![]()
Сообщение
#23
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
небольшой вопрос. А как сделать с помощью регэкспа, чтобы он находил любую последовательность символов, не принадлежащую заданной?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#24
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
AD, всмысле инверсии чтоли?
если да, то так [^...] где многоточие - Р.В. которое надо исключить |
|
|
Tonal |
![]()
Сообщение
#25
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Что такое "последовательность символов, не принадлежащую заданной"?
|
|
|
AD |
![]()
Сообщение
#26
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Tonal |
![]()
Сообщение
#27
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Ты опять криво выразился. Прочитай что-нибудь про регэкспы.
![]() В регулярном выражении существует понятие класса символов. На принадлежность или непринадлежность какому-нибудь классу символ можно тестировать. А вот принадлежность символа какому-нибудь произвольному регэкспу не определена. Например символ W и принадлпжит или нет в зависимости от того, какие символы его окружают. Можно тестировать строку на совпадение с регуляркой, но опять же например сторока C_ON с ней не совпадёт. Тут всё опять зависит от того, что ты хочешь сделать. Если таки убрать из текста всё лишнее, как описывал, то алгоритм я тебе уже нарисовал. Правда т.к. в QRegExp нет findall, придётся выписать цикл явно (см. пример к "Capturing Text"). П.С. Есть ещё позитивный и негативный предпросмотр, но с ним лучше не связываться, пока не разобрался нормально. ![]() |
|
|
AD |
![]()
Сообщение
#28
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Практически сделал, осталось добиться последнего.
Чтобы в строке подобного рода выражения [\\d.]+[WC]?_O(N|FF)\\b можно было встретить большое количество раз. А то, он вырезает только первое подобное выражение из строки, а все сотальные, удовлетворяющие заданному регулярному выражению, затирает. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#29
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
, а все сотальные, удовлетворяющие заданному регулярному выражению, затирает ЗАТИРАЕТ? наверное правильнее сказать не возвращает. тебе надо указатель дальше двигать по тексту, типа этого rx.indexIn(text, pos) |
|
|
AD |
![]()
Сообщение
#30
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Извините, забыл сразу выложить код, как я реализовал. Вот сейчас выкладываю:
source
Регэксп rx - это регэксп, который определяет те последовательности символов, которые следует оставить. Ну а далее, путем сравнений - это реализовано! |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 30.5.2025, 13:29 |