crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 16.7.2025, 19:24