crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QRegExp + \n, Регулярка с символом конца строки
lioncub
  опции профиля:
сообщение 13.11.2009, 17:07
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


Имею строку QString str:
abcd
defg
ghij
jklm
mnop
pqrs


код:
QRegExp rx(".*(..)\\n");

QStringList lists;
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
        lists << rx.cap(1);
        pos += rx.matchedLength();
}


на выходе получаю один элемент с последними 2 символами: "rs"
А нужно последние 2 символа каждой строки для каждого элемента. Что не так?

зы Кодировка utf-8 везде. Конец строки \n.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 13.11.2009, 17:53
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


или из QString str = "=abcd\n=d-0efg\n=g?hij\n=jklm\n=mnop\n=pqr+s\n";
все символы между = и \n
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.11.2009, 17:56
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(lioncub @ 13.11.2009, 20:07) *
Конец строки \n.
конец строки в регулярных выражениях - $ (знак доллара)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.11.2009, 18:04
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


lioncub,
к примеру
Цитата(lioncub @ 13.11.2009, 17:53) *
или из QString str = "=abcd\n=d-0efg\n=g?hij\n=jklm\n=mnop\n=pqr+s\n";
все символы между = и \n

с помощью QString::split()
легко сделать.
QStringList lst = str.split('\n'), lst_last2symbol;
foreach(QString s,lst) lst_last2symbol<<s.right(2);

как то так.


Сообщение отредактировал kwisp - 13.11.2009, 18:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 13.11.2009, 18:19
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


Litkevich Yuriy, т.е. новая строка
QString::split() - не подойдет, это простейший пример...


ответ на 1 вопрос ".([^\\n].)\\n"
ответ на 2 вопрос "=([^\\n]*)\\n"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.11.2009, 18:26
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(lioncub @ 13.11.2009, 18:19) *
QString::split() - не подойдет, это простейший пример...

давай не простейший пример.
ты хочешь разбить строку на подстроки и засунутьих в qStringList именно с помощью QRegExp ?


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 13.11.2009, 18:50
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


пожалуйста, если интересно:
Раскрывающийся текст
[996]
num=9
pic=Z0RVh0Q29tbWVud

[375.Velcite]
encoding=cp1251
key1=sdfcvsdva
key2=sdfsdcvsd
maxs=sdfsdfaxcvsdvg
no=sdfsdafsdfa
pic=dclmf;x
picl=sdffvasdfvsdv cv
post=1
ppict=1

[3.Trne.ytr]
encoding=utf-8
key1=sdfcvsdva
key2=sdfsdcvsd
maxs=sdfsdfaxcvsdvg
no=sdfsdafsdfa
pic=dclmf;x
picl=sdffvasdfvsdv cv
post=1

[5]
num=10
pic=ecmle;x

вот небольшой кусочек файла txt... кодировка utf8, перевод строки \r\n
как видно в файле есть "болки", нужно вытащить, из тех болков которые начинаются на [только_цифры] (выделил синим) кусок после pic= (выделил красным)
таких блоков много....

я думаю, разделить сначала на блоки, а потом взять то, что мне нужно!
ну а если одним регеспом, то это высший пилотаж...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.11.2009, 11:27
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


извини, только случайно обнаружил последнее сообщение.

почемуто у меня отображалось что в этой теме нет новых сообщений. ???

Сообщение отредактировал kwisp - 16.11.2009, 11:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.11.2009, 12:42
Сообщение #9


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


вот
QRegExp reg("(\\[\\d+\\])(.*)(pic=)([^\"]+)([\\W+])");
думаю разберешься.
в 4ой круглой скобке(она определяет чему может быть равно pic) сам поставишь, я влепил "все кроме ковычки" я не знаю какое у тебя полное условие может "все кроме пробелов и проч."
пользоваться с помощью indexIn() и cap()

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 16.11.2009, 16:11
Сообщение #10


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Так это ж "галимый" *.ini файл... Может просто QSettings использовать для чтения?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 18:45