crossplatform.ru

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

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.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 14)
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 использовать для чтения?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.11.2009, 16:32
Сообщение #11


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

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

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




Репутация:   94  


Цитата(lioncub @ 13.11.2009, 21:50) *
кодировка utf8
Цитата(kuzulis @ 16.11.2009, 19:11) *
Так это ж "галимый" *.ini файл... Может просто QSettings использовать для чтения?
QSettings использует только локальную кодировку :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 16.11.2009, 17:31
Сообщение #12


Старейший участник
****

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

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




Репутация:   9  


Проще открыть и читать его прострочно, анализируя структуру.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 20.11.2009, 15:23
Сообщение #13


Студент
*

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

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




Репутация:   0  


kwisp, не много не то, но мысль понял....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 20.11.2009, 15:28
Сообщение #14


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

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

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




Репутация:   23  


lioncub,
нет, брат, давай разберёмся основательно.
выкладывай что ты хочеешь от регулярного выражения?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 20.11.2009, 16:12
Сообщение #15


Студент
*

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

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




Репутация:   0  


kwisp, впринципе вот тут все описал с примером.
По твоему выражению, у тебя второе совпадение берет все символы, до конца файла, и получается на выходе в 4 совпадении будет последняя из "pic=" строка. 5-ое совпадение, нужно исключая \\n (ты об этом и написал, поставить, что нужно вместо ").
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 27.6.2025, 13:56