crossplatform.ru

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


  Ответ в Карманы в QRegExp
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
cupersuper Дата 9.5.2011, 13:17
  Кстати, сейчас проверил выражение:

txtString.replace(QRegExp("$"),"XXX");


Применительно к строке, указанной в моём примере и результатом стало:

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

***

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


Litkevich Yuriy, можете у себя проверить, это я о знаке $ в регулярных выражениях, хотя опять меня интересует другой вопрос
cupersuper Дата 9.5.2011, 11:45
  и он также не срабатывает
cupersuper Дата 9.5.2011, 11:01
 
Цитата(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" );

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

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 Дата 8.5.2011, 22:18
  конец предложения - $
Следовательно и шаблон должен быть таким:
[^\.]$


Пардон, продолжение не прочитал
cupersuper Дата 8.5.2011, 21:56
  Уточню, хотел покороче описать проблему, но походу не получилось,
к примеру, есть строка:


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

***

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



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

Вопрос кодировки не волнует, регулярное выражение вставляю в QString::fromLocal8Bit(). Если просто менять \r\n на .\r\n , то как-бы регулярка не нужна, т.к. данную замену надо производить не вконце каждого предложения, а только где подходит условие: "после строчной буквы - заглавная, без точки между ними".
fedin.dmitriy Дата 8.5.2011, 4:50
  Все прикольно, только вот где указывается строка для поиска? :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] то они прекрасно срабатывают и на кириллицу тоже.
xls Дата 6.5.2011, 11:22
 
Цитата(cupersuper @ 5.5.2011, 20:04) *
txtString.replace( QRegExp("[а-я](\r\n)[А-Я]").cap(1),".\r\n" );

Кириллица не поддерживается, попробуй в Unicode : \\x0410-\\x042F
RazrFalcon Дата 5.5.2011, 22:05
  Могу предложить:
http://regexr.com?2tmqa
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 1:43