Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Larry от Сентябрь 17, 2013, 13:19



Название: Регулярное выражение
Отправлено: Larry от Сентябрь 17, 2013, 13:19
Добрый день, форумчане. У меня возникла проблема с составлением регулярного выражения для поиска подстроки в конфиге...Конфиг имеет следующий вид:
AT#RSCRIPT=Config.ini\r\n
\r\n
<<<#----------GPRS---------#\r\n
Необходимо найти и отсечь:
AT#RSCRIPT=Config.ini\r\n
\r\n
<<<
Я написал следующее выражение: ^AT#RSCRIPT=[A-Za-z0-9]+\\.[A-Za-z]+\\r\\n+<* и проверил в notepad++, а вот в программе это не работает...перепробовал разные варианты...проблема в знаке #...Как правильно его экранировать?


Название: Re: Регулярное выражение
Отправлено: mutineer от Сентябрь 17, 2013, 13:51
Либо убери ^, либо добавь флаг m


Название: Re: Регулярное выражение
Отправлено: Larry от Сентябрь 17, 2013, 13:54
пробовал и без знака ^...одно и тоже - работать не хочет...А что за флаг m?


Название: Re: Регулярное выражение
Отправлено: mutineer от Сентябрь 17, 2013, 13:55
многострочный регэксп. Вроде без флага ^ означает начало всего текста, а с ним начало строки


Название: Re: Регулярное выражение
Отправлено: kambala от Сентябрь 17, 2013, 14:08
бэкслэш как символ в регулярном выражении внутри си-строки записывается \\\\


Название: Re: Регулярное выражение
Отправлено: Larry от Сентябрь 17, 2013, 14:21
Решил сократить немного выражение для проверки и ввел всего лишь ^AT - находит и без ^ тоже находит...а вот AT# уже не находит и AT\\\\# тоже не работает... ???


Название: Re: Регулярное выражение
Отправлено: kambala от Сентябрь 17, 2013, 14:30
решетку экранировать \\#, а \\\\ я имел в виду для \r и \n если они в файле записаны как 2 символа а не как 1


Название: Re: Регулярное выражение
Отправлено: Larry от Сентябрь 17, 2013, 14:36
спасибо...изменил на AT\\# все также - не работает...что еще может быть? я так понимаю все дело в диезе (#)...а экранировать обратным слэшем не получается...как можно все таки его экранировать?


Название: Re: Регулярное выражение
Отправлено: kambala от Сентябрь 17, 2013, 20:57
ты про \r и \n не объяснил — каждый из них состоит из одного символа (т.е. это специальные символы перевода строки) или это 2 символа (бэкслэш и буква)? если второе, то бэкслэш надо писать как \\\\


Название: Re: Регулярное выражение
Отправлено: Larry от Сентябрь 18, 2013, 08:18
извините, не смог попасть на форум до сего момента...это специальные символы перевода строки. Я уже перепробовал по всякому, но не добился успеха ???, но знаю что этому есть простое объяснение...к сожалению пока не нашел причины. Диез экранируется обратным слэшем (насколько я понял, то да, но могу ошибаться)? Просто когда я вводил команду AT\\#, то все также не работало, т.е. вся запарка из-за него...


Название: Re: Регулярное выражение
Отправлено: _OLEGator_ от Сентябрь 18, 2013, 09:20
Код
C++ (Qt)
QString text("test \r\nAT#RSCRIPT \r\n asddad");
QRegExp reg("AT#RSCRIPT");
 
int index = reg.indexIn(text); // =7

Работает корректно.


Название: [РЕШЕНО]Регулярное выражение
Отправлено: Larry от Сентябрь 18, 2013, 09:40
Спасибо большое всем за помощь...это я протупил и конкретно...этот конфиг я считываю из прибора и конечно не учел, что информация по uart идет не одним целым, а частями. Сейчас вывел эту информацию и увидел, что сначала пришло "АТ", а потом еще одна часть и так весь конфиг разделило на 5 частей. Еще раз спасибо. Буду обрабатывать после получения всего файла...


Название: Re: Регулярное выражение
Отправлено: Larry от Сентябрь 18, 2013, 14:57
Дабы не гадить на форуме :lol: , напишу здесь...Суть вопроса в следующем: есть устройство, которое подключено к ПК. Обмен информацией осуществляется посредством АТ-команд. На устройстве есть питоновские скрипты. Можно получить список файлов, с этим я уже боролся и сейчас получилось выводить все файлы как мне нужно. Теперь мне необходимо сохранять скрипты на ПК, но встретил трудность...если это файл конфига, т.е. он текстовый, то записать данные в файл нет проблем, но если выбран скрипт с расширение .pyo (байткод), то возникают проблемы с его считыванием и сохранением на ПК. Изначально я использую QString, и здесь с конфигами проблем нет, хотел переделать под QByteArray, но не знаю как реализовать разбор файла, т.к. там необходимо вырезать служебную информацию...вырезаю регулярными выражениями в QString, а вот в QByteArray как я понял нельзя работать с регулярными выражениями. Или я ошибаюсь? Подскажите пожалуйста.