Версия для печати темы
Форум на CrossPlatform.RU _ Qt Общие вопросы _ Карманы в QRegExp
Автор: cupersuper 5.5.2011, 20:04
Здравствуйте,
Есть строка "Привет\r\nМир", нужно приобразовать её в "Привет.\r\nМир"
Пробывал как-то так:
txtString.replace( QRegExp("[а-я](\r\n)[А-Я]").cap(1),".\r\n" );
, может кто подскажет
Автор: RazrFalcon 5.5.2011, 22:05
Могу предложить:
http://regexr.com?2tmqa
Автор: xls 6.5.2011, 11:22
Цитата(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
Все прикольно, только вот где указывается строка для поиска?
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
Уточню, хотел покороче описать проблему, но походу не получилось,
к примеру, есть строка:
Ехали медведи на велосипеде.
А за ними кот задом наперёд
А за ним комарики на воздушном шарике
А за ними раки на хромой собаке.
***
Вот оно, глупое счастье, с белыми окнами в сад!
По пруду лебедем красным плавает тихо закат.
В некоторых местах в пропущены точки в конце предложения (после "наперёд" и "шарике"), нужно определить конец предложения без точки:
[а-я]\r\n[А-Я]
И заменить на:
[а-я].\r\n[А-Я]
Вопрос кодировки не волнует, регулярное выражение вставляю в QString::fromLocal8Bit(). Если просто менять \r\n на .\r\n , то как-бы регулярка не нужна, т.к. данную замену надо производить не вконце каждого предложения, а только где подходит условие: "после строчной буквы - заглавная, без точки между ними".
Автор: Litkevich Yuriy 8.5.2011, 22:18
конец предложения - $
Следовательно и шаблон должен быть таким:
[^\.]$
Пардон, продолжение не прочитал
Автор: 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 9.5.2011, 6:53
Цитата(cupersuper @ 9.5.2011, 1:23)
$, насколько я помню конец всей строки QString, а надо перевод строки и каретки, и опять же сохраняя условие
просто конец строки (в зависимости от платформы - \r\n или \r или \n). Для регулярного выражения вообще "Конец всей строки QString" - неизвестный термин.
Автор: 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" );
т.к. $, действует только в конце выражения
Автор: cupersuper 9.5.2011, 11:45
и он также не срабатывает
Автор: cupersuper 9.5.2011, 13:17
Кстати, сейчас проверил выражение:
txtString.replace(QRegExp("$"),"XXX");
Применительно к строке, указанной в моём примере и результатом стало:
Ехали медведи на велосипеде.
А за ними кот задом наперёд
А за ним комарики на воздушном шарике
А за ними раки на хромой собаке.
***
Вот оно, глупое счастье, с белыми окнами в сад!
По пруду лебедем красным плавает тихо закат.XXXLitkevich Yuriy, можете у себя проверить, это я о знаке $ в регулярных выражениях, хотя опять меня интересует другой вопрос
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)