crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Карманы в QRegExp
cupersuper
  опции профиля:
сообщение 5.5.2011, 20:04
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.5.2011
Пользователь №: 2654

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




Репутация:   0  


Здравствуйте,

Есть строка "Привет\r\nМир", нужно приобразовать её в "Привет.\r\nМир"

Пробывал как-то так:
txtString.replace( QRegExp("[а-я](\r\n)[А-Я]").cap(1),".\r\n" );

, может кто подскажет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 5.5.2011, 22:05
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Могу предложить:
http://regexr.com?2tmqa

Сообщение отредактировал RazrFalcon - 6.5.2011, 12:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xls
  опции профиля:
сообщение 6.5.2011, 11:22
Сообщение #3


Студент
*

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

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




Репутация:   2  


Цитата(cupersuper @ 5.5.2011, 20:04) *
txtString.replace( QRegExp("[а-я](\r\n)[А-Я]").cap(1),".\r\n" );

Кириллица не поддерживается, попробуй в Unicode : \\x0410-\\x042F
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fedin.dmitriy
  опции профиля:
сообщение 8.5.2011, 4:50
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 8.5.2011
Пользователь №: 2660

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




Репутация:   1  


Все прикольно, только вот где указывается строка для поиска? :rolleyes:
QRegExp rx("(\r\n)");
if(rx.indexIn(txtString)!=-1) txtString.replace(rx.cap(1),".\r\n");


или второй пример уже более красивый
txtString.replace(QRegExp("\r\n"),".\r\n");


Оба прекрасно сработали. И когда в регулярном выражении задаются шаблоны, типа [a-z] или [A-Z] то они прекрасно срабатывают и на кириллицу тоже.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
cupersuper
  опции профиля:
сообщение 8.5.2011, 21:56
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.5.2011
Пользователь №: 2654

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




Репутация:   0  


Уточню, хотел покороче описать проблему, но походу не получилось,
к примеру, есть строка:


Ехали медведи на велосипеде.
А за ними кот задом наперёд
А за ним комарики на воздушном шарике
А за ними раки на хромой собаке.

***

Вот оно, глупое счастье, с белыми окнами в сад!
По пруду лебедем красным плавает тихо закат.



В некоторых местах в пропущены точки в конце предложения (после "наперёд" и "шарике"), нужно определить конец предложения без точки:
[а-я]\r\n[А-Я]
И заменить на:
[а-я].\r\n[А-Я]

Вопрос кодировки не волнует, регулярное выражение вставляю в QString::fromLocal8Bit(). Если просто менять \r\n на .\r\n , то как-бы регулярка не нужна, т.к. данную замену надо производить не вконце каждого предложения, а только где подходит условие: "после строчной буквы - заглавная, без точки между ними".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.5.2011, 22:18
Сообщение #6


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

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

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




Репутация:   94  


конец предложения - $
Следовательно и шаблон должен быть таким:
[^\.]$


Пардон, продолжение не прочитал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
cupersuper
  опции профиля:
сообщение 8.5.2011, 22:23
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.5.2011
Пользователь №: 2654

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




Репутация:   0  


Например:

QRegExp rx( QString::fromLocal8Bit("[А-Я](\r\n)[а-я]") );
if(rx.indexIn(txtString)!=-1) txtString.replace(rx.cap(1),".\r\n");


необходимой замены не производит.
Интересно, возможно ли использование карманов QRegExp.cap() в связке с QString.replace?


to Litkevich Yuriy

$, насколько я помню конец всей строки QString, а надо перевод строки и каретки, и опять же сохраняя условие
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.5.2011, 6:53
Сообщение #8


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

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

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




Репутация:   94  


Цитата(cupersuper @ 9.5.2011, 1:23) *
$, насколько я помню конец всей строки QString, а надо перевод строки и каретки, и опять же сохраняя условие
просто конец строки (в зависимости от платформы - \r\n или \r или \n). Для регулярного выражения вообще "Конец всей строки QString" - неизвестный термин.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
cupersuper
  опции профиля:
сообщение 9.5.2011, 11:01
Сообщение #9


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.5.2011
Пользователь №: 2654

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 9.5.2011, 6:53) *
Цитата(cupersuper @ 9.5.2011, 1:23) *
$, насколько я помню конец всей строки QString, а надо перевод строки и каретки, и опять же сохраняя условие
просто конец строки (в зависимости от платформы - \r\n или \r или \n). Для регулярного выражения вообще "Конец всей строки QString" - неизвестный термин.


Ок, спасибо, буду знать, только у меня проблема не с определением конца строки, а именно с использованием .cap в .replace
Нужно условие:
"после строчной буквы - заглавная, без точки между ними"
заменить на
"после строчной буквы - заглавная, с точкой между ними"

а согласно выражению:
[^\.]$

я получу, например в данной строке:

Ехали медведи на велосипеде.
А за ними кот задом наперёд.
А за ним комарики на воздушном шарике.
А за ними раки на хромой собаке.
.
***.
.
Вот оно, глупое счастье, с белыми окнами в сад!.
По пруду лебедем красным плавает тихо закат.


четыре лишних точки (пометил зелёным).

Вобщем без QRegExp::cap() или QRegExp::capturedTexts() необойтись, да и хочется научиться их использовать в связке с QString::replace()

Я себе это представляю так:

txtString.replace( QRegExp("[а-я]($)[А-Я]").cap(1), ".\r\n" );


но не работает(


Собственно первый пример лучше подходил для моей ситуации

txtString.replace( QRegExp("[а-я](\r\n)[А-Я]").cap(1),".\r\n" );

т.к. $, действует только в конце выражения
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
cupersuper
  опции профиля:
сообщение 9.5.2011, 11:45
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.5.2011
Пользователь №: 2654

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




Репутация:   0  


и он также не срабатывает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.11.2024, 8:00