Форум » Справочная » Регулярные выражения » Ответить

Регулярные выражения

Алексей: Доброе время суток! Не могу разобраться с регулярными выражениями. Если не сложно, напишите здесь примеры каких нибудь полезных регулярных выражений... Заранее благодарю!

Ответов - 57, стр: 1 2 3 All

KOMODOR: Думаю, рациональнее всего бы было перенести тему в справочный раздел, ибо тема действительно интересна и обширна. Как-то я, например, долго подбирал регулярку на поиск глав по цифрам, но так ничего путно и не получилось, плюнул, и переименова все главы из "1" в "глава 1"

Cminant: Пожалуй, теорию я тут расписывать не буду, этого добра при желании в интернете можно найти много. Начать стоит хотя бы со странички на википедии. Что касается практики, то приведу несколько примеров: чтоб далеко за примером не ходить, начнем с поиска глав =) пример (главы по цифрам с точкой или без точки): [pre2] 1. текст текст текст текст~ ~текст текст текст текст. 2. текст текст текст текст~ ~текст текст текст текст. 3. текст текст текст текст~ ~текст текст текст текст.[/pre2] шаблон: ^ *\d+\.?$ "^" - поиск начинается с начала строки " *" - пробелы в начале строки, если они есть "\d+" - одна или несколько цифр идущих подряд "\.?" - если после цифр есть точка, включаем и ее тоже "$" - конец строки пример (цифры с точкой + название главы): [pre2] 1. ДОЛГОЖДАННЫЙ ПРИЕМ текст текст текст текст~ ~текст текст текст текст. 2. ТЕНЬ ПРОШЛОГО текст текст текст текст~ ~текст текст текст текст. 3. ТРОЕ - ЭТО КОМПАНИЯ текст текст текст текст~ ~текст текст текст текст.[/pre2] шаблон: ^ *\d+\..*$ "^" - поиск начинается с начала строки " *" - пробелы в начале строки, если они есть "\d+" - одна или несколько цифр идущих подряд "\." - точка ".*" - что угодно (все символы сколько их есть до конца строки "$") "$" - конец строки Пример (пустая строка + название главы + пустая строка): [pre2] Глас рассудка I текст текст текст текст~ ~текст текст текст текст. Ведьмак текст текст текст текст~ ~текст текст текст текст. Глас рассудка II текст текст текст текст~ ~текст текст текст текст.[/pre2] Шаблон: \r\n\r\n.{1,50}\r\n\r\n "\r\n\r\n" - Cимволы перевода строки (CR LF). Два перевода подряд (CR LF CR LF) = пустая строка ".{1,50}" - Название главы (строка не более 50 любых символов) "\r\n\r\n" - Символы перевода строки (CR LF). Два перевода подряд (CR LF CR LF) = пустая строка т.е. шаблон ищет строку не более чем в 50 символов, отделенныю от остального текста пустой строкой сверху и снизу. Примечание: при поиске глав все найденные символы новой строки и пробелы по краям потом удаляются из тэга автоматически, так что можно не заморачиваться с дополнительными шаблонами поиска строк перед и после основного шаблона (вроде "(?<=\r\n\r\n).{1,50}(?=\r\n\r\n)" ) Что касается использования регулярных выражений в словарях, то см, например, тему про омографы... Для экспериментов можно использовать служебное окно отладки словарей в режиме "RegEx", открывающееся через редактор словарей:

MoppoH: Если нет много времени чтобы составить словарь можно начать с простейших выражений типа (?i)(?<=(ают|гие|дние|жие|кие|нние|рил|тал|хие|шие|шние|щие|ые).{0,5})\bсектора\b = сектора< (?i)(?<=(али|ать|ают|гие|гли|дние|дул|ены|жие|ись|ите|ить|кие|хие|шие|шние|щие|ые).{0,5})\bсвечи\b = све<чи и такие в окончания подходят для большинства омографов, но и такой простой поиск поможет избавиться от большинства ошибок при произношении того или иного слова, я на работе в течении дня слушая книгу записываю где он неправильно произносит, а вечером добавляю в словарь. пы.сы жаль нет поиска по тексту приходится искать в другой программе. вот словарь замены правда он еще не идеален click here


odinokiyklaus: MoppoH пишет: (?i)(?<=(али|ать|ают|гие|гли|дние|дул|ены|жие|ись|ите|ить|кие|хие|шие|шние|щие|ые).{0,5})\bсвечи\b = све<чи Всем привет. Уже всю голову сломал, не понимаю... Вот ваше мнение какое?? Вы думаете это выражение будет реально работать?? Ну вот сами посмотрите.. на это выражение вываливается ошибка - видимо шаблон али|ать|ают и т.д. нельзя брать в скобки, т.е. группировать... Единственный способ, который у меня получился - это выражение такого типа: (?<=али|шие|шние|щие|ые)\b.{0,30}свечи\b и для анализируемой строки догарали наши свечи решение будет вида догарали наши свечи, причем вместе с пробелом тут можно посмотреть результат. и далее, если рег. выражение будет такого типа (?<=али|шие|шние|щие|ые)\b.{0,30}свечи\b = све<чи, то мы благополучно заменим найденное выражение наши свечи на выражение све<чи и итогом будет не строка догарали наши све<чи, а строка догарали све<чи Может кто знает, решается ли вообще эта задача по поиску конкретного слова (свечи) в зависимости от предшествующего контекста (окончания определений для слова свечи)?

Cminant: odinokiyklaus пишет: Ну вот сами посмотрите.. на это выражение вываливается ошибка - видимо шаблон али|ать|ают и т.д. нельзя брать в скобки, т.е. группировать... Смотря где... Сущестуют различные реализации интерпретаторов регулярных выражений, и у каждой могут быть небольшие отличия и особенности. Онлайн сервис по вашей ссылке предназначен для тестирования выражений в среде языка Ruby. В нем, как и во многих других интерпретаторах регулярных выражений, поддержка look-behind ограниченная: результтат внутри (?<=...) всегда должен быть фиксированной длинны, а это значит, что "*", "+", "{x,y}" и прочие квантификаторы для неизвестного количества повторов, а так же варианты различной длинны, разделенные символом "|" недопустимы. В KooBAudio используется движок регулярных выражений, встроенный в .NET Framework. Он полностью поддерживает все возможности синтаксиса внутри look-behind групп, и такое выражение будет работать. Для проверки есть встроенная опция "Меню Словари->отладка словарей->RegEx" или кнопка с увеличительным стеклом в панели инструментов редакора словарей. В последней версии как раз она была усовершенствована для удобства работы с рег.выражениями в редакторе. Есть простой режим проверки рег выражений. В верхнем поле - выражение, в нижнем текст, в котором ищутся совпадения. В режиме проверки словарей все устроено вот как: в поле (3) можно ввести любой текст для проверки. в поле (4) - результат обработки текущими словарями. Если открыто окно редактора словарей, и в снем нажать кнопу "Сохранить", то этот результат автоматически обновится. В списке (5) будут показаны правила, которые выдали совпадения. Зачеркнутые - те, что ссылаются на "занятый" другим правилом фрагмент, и не влияют на результат. Если открыты одновременно окно редактора и отладки словарей, и в редакторе включена подсветка синтаксиса (2), то текст в поле (3) будет подсвечен редактируемым выражением.

Cminant: P.S. Свои словари выложу как-нибудь позже, все никак руки не дойдут окончательно рассортировать и привести их в порядок... Вот еще пара советов с примерами использования регэксов в словарях: Не обязательно всегда использовать .{0,x}. Если словосочетание более-менее конкретное, можно использовать конструкции типа ( \w+)? для возможного одного слова между ключевым словом и омографом... [pre2](?i)(?<=\b(?:дай|дать|дал|дала|дают|давал|давала|давали) (?: \w+)?)воды\b=воды<[/pre2] Кроме поиска вперед/назад в группах (?<=...) (?=...) можно так же иногда использовать обратную связь, чтобы вставить содержимое группы в результат замены, например: [pre2](?i)\bстоящ(ий|ая|ему|ей|его|юю|ем|ей|ими)(?= (рядом|неподалеку|около|возле|за|под|у)\b)=стоя<щ$1[/pre2]$1 будет заменен на результат группы 1 (ий|ая|ему|ей|его|юю|ем|ей|ими) [pre2](?i)\b(замк[ауиео])(х|м|ми|в)?\b(?=[^\r\n\.\?\!]{0,40}(?:откры|отпер|запер|взл[оа]м|вскры|висяч|навесн|ржав|амбарн|хитроумн|хлипк|щелкнул|ключ|двер))=$1<$2[/pre2]$1 вставит результат (замк[ауиео]) $2 - результат (х|м|ми|в)? Номера групп присваиваются автоматически, начиная с 1, слева направо. Группы, к которым не нужно потом обращаться рекомендуется обьявлять с ключем ?: (?:шаблон) - для таких групп обратная связь не создается, и они пропускаются при нумерации. Это так же немного ускорит обработку правила. При большом кол-ве правил со обилием группировок это может дать заметный прирост производительности. В сложных выражениях с обилием вложенных групп можно использовать именованные группы, чтобы не высчитывать номер нужной группы, а обратиться к ней по имени. [pre2](?i)\b(?<начало>замк[ауиео])(?<окончание>х|м|ми|в)?\b(?=[^\r\n\.\?\!]{0,40}(?:откры|отпер|запер|взл[оа]м|вскры|висяч|навесн|ржав|амбарн|хитроумн|хлипк|щелкнул|ключ|двер))=${начало}<${окончание}[/pre2] Использование обратных связей для омографов в правилах вида [pre2](?i)((али|ать|ают|гие|гли|дние|дул|ены|жие|ись|ите|ить|кие|хие|шие|шние|щие|ые).{0,30}))\bсвечи\b=$1све<чи[/pre2] Теоретически возможно, но НЕ рекомендуется. Т.к. правило зарезервирует весь соответствующий текст, и прочие правила не смогут его обработать. Например, правило догарали=>догара<ли Будет отсеяно в тексте "догарали наши свечи", т.к. слово уже зарезервировано правилом для омографа... В общем, для таких правил, лучше использовать поиск вперед/назад в (?<=...) (?=...) с ними резервируется только "нужное" слово, а окружающий текст может быть потом обработан другими правилами.

MoppoH: На самом деле там все достаточно просто 1 если ищешь только по окончанию то регулярное выражение выглядит примерно так: (?i)(?<=(а(ли|ть|ют)|(г|дн|ж|к|х|хн|ш|шн|щ)ие|дел|ены|жит|иеся|или|ить|кины|лил|лись|няли|рил|рыл|сал|тся|шую|ые|ыть)\b.{0,5})\bокна\b (г|дн|ж|к|х|хн|ш|шн|щ)ие это чтобы не писать отдельно гие|дние| и так далее \b это чтобы искало только в окончание, \b ставит границы слова .{0,5} количество символов перед этим словом \bокна\b так же с границами чтобы не искало слова окнами или корень окна в других словах 2 если ищет окончания после нужного слова (?i)\bвсе\b(?=[^\.,!?\b-\b]{0,15}(вало|дило|ейно|ело|ено|зано|ивое|ишь|кало|комо|лось|льно|мал|ойно|ояло|нее|нно станет|тите|ький|ясно)\b) \bвсе\b опять же границы слова [^\.,!?\b-\b] чтобы не искало если есть между словами точки, запятые, воск знаки, и тире |комо|лось|льно| окончания слов для слова всё )\b) чтобы искало только окончания 3 по поиску слов если есть и другие слова между ними (?i)(?<=(бледне(ют|ли)|гор(ели|ят)|неме(ли|ют)|ожег|раздул|раст(ер|ир)|\bтер\b|тер(ла|ли)|(вы|рас)тер|щекотал)[^\.,!?\b-\b]{0,30})\bщеки\b бледне(ют|ли)|гор(ели|ят) корень один но окончания разные [^\.,!?\b-\b] чтобы не искало если есть между словами точки, запятые, воск знаки, и тире {0,30} количество символов между словами \bщеки\b ограничение слова пы.сы. отдельное спасибо за подсказку с группами

odinokiyklaus: MoppoH пишет: На самом деле там все достаточно просто 1 если ищешь только по окончанию то регулярное выражение выглядит примерно так: (?i)(?<=(а(ли|ть|ют)|(г|дн|ж|к|х|хн|ш|шн|щ)ие|дел|ены|жит|иеся|или|ить|кины|лил|лись|няли|рил|рыл|сал|тся|шую|ые|ыть)\b.{0,5})\bокна\b Может я загоняюсь, но мне кажется всё совсем не так просто.. К примеру вышеприведённое выражение нежизнеспособно.. Поправьте меня, если я ошибаюсь.

MoppoH: почему Вы так решили, будут заменены, разбив(али) окна, разбив(ают) все окна, это можно проверить в отладке проекта в реальном времени. группа (а(ли|ть|ют)) содержит в себе две группы и все окончания на али, ать, ают, будут найдены на растояние 5 букв и пробелов от слова окна http://fotki.yandex.ru/users/moppoh1979/view/715643/

Cminant: odinokiyklaus Это баг в окне отладки. При редактировании нижнего поля (текст для проверки) в RegEx режиме автообновление не срабтывает, подсветка остается от предыдущего результата... В следующей версии будет исправлено, пока же нужно вручную обновалять кнопкой со стрелкой.

panalex: Не подскажете ли, уважаемые, существуют ли текстовые редакторы, поддерживающие все возможности синтаксиса внутри look-behind групп, как движок регулярных выражений, встроенный в .NET Framework? Или использующие этот движок. Сильно расширяются возможности автоматизации обработки текстов.

Cminant: panalex Есть редактор DtPad. Написан под .NET 4.0, есть поиск / замена по рег. выражениям.

panalex: Cminant Спасибо, буду пробовать

KOMODOR: подскажите гуманитарию, надо регулярное выражение, чтобы "*го гла<за", но с исключением "его глаза", - по всей моей практике, единственно необходимое регулярное выражение.

Cminant: KOMODOR [pre2](?<!\bе)го глаза\b[/pre2] как-то так

MoppoH: #(?i)(?<=(\Bего|ого)\b[^\.,!?-]{0,2})\bглаза\b=глазаъ< я пользуюсь таким, символ \B обозначает что это не конец слова, [^\.,!?-] обозначает что между его и глаза нет запятых и других знаков, \bглаза\b обозначает что будет искать только слово глаза, а не глазастых или Оглазар но все равно бывают исключения, зрачок его гла<за, закрыл его глаза<

KOMODOR: MoppoH порылся в существующих словарях регулярных выражений на сайте - нашел несколько правил, которые перекрыли всю необходимую потребность, на все случаи жизни. Да тут, оказывается, все есть, только вручную копаться надо...

wasyaka: MoppoH спасибо за ответ по словам, и если возможно, прокомментируйте (объясните) выделенное, в частности квадратные скобки: #(?i)(?<=((а|е|и|о|я)[бнтц]и(е|и|й|ю|я)|тви[еию]|\Bего|нием|ого|асть)\b[^\.,!?-]{0,2})\bбункера\b=бУнкера #(?i)(?<=([вн]ое|ое|[вщ]ая|ая|инул)\b[^\.,!?-]{0,2})\bбытие\b=бытиё И внекоторых рег. выражениях добавлен Ъ: #(?i)(?<=(ая|(ж|к|н)ая|была)\b[^\.,!?-]{0,2})\bбелка\b=бе<лкаъ #(?i)\bбелка\b(?=[^\.,!?-]{0,30}(колесе))=бе<лка ???

MoppoH2: в квадратных скобках указываются одинарные буквы, при нахождение которых срабатывает рег выражение в круглых скобках можно указать сочетание букв, при нахождение которых сработает рег выражение то есть (а|е|и|о|я)[бнтц]и(е|и|й|ю|я) найдет ение, ация а вот (тут можно написать что именно надо найди до|прис)[бнтц]и(е|и|й|ю|я) найдет присбию, присния в некоторых случая слова заканчивающиеся на А даже если стоит ударение все равно читает не правильно, а при добавление Ъ уже читает правильно видимо баг движка

odinokiyklaus: Лично для меня хорошим учебником была статья в Википедии и практика в написании выражений. Я отключил все словари, завел один, включил его и в нем ужен писал правила через notepad++ и в окне отладки словарей смотрел на получившиеся результаты. [бнтц] - один любой из символов из этого перечня [перечень одиночных символов] [бнтцоа]{1,2} {1,2}-квантификатор - означает один или два символа из перечня [] - пример цо ба ц б - все подходит {1,} - один и более (с правой стороны внутри после запятой нет ограничения) [бнтцоа]+ знак плюс после перечня - не менее одного символа из перечня [бнтцоа]? знак вопроса после перечня - ноль или один символ из перечня [^\.,!?-] - любой символ кроме . (точка) , ! ? - . - знак точки означает вообще любой один символ. Чтобы написать именно точку её экранируют \. это означает точку (она|оно|они) - любой вариант в скобках сработает. знак | - означает или \b - граница слова то есть \bвсе\b - найдет только слово все, а слово всех проигнорирует \В - середина слова Это условия поиска по типу если перед словом1 стоит слово2 или слово3, то слово1 будет найдено, а иначе не найдет. (?<=(слово2 |слово3))слово1 =слово<1 - заменяет найденное слово1 на слово<1 с ударением пример (?<=(слово2 |слово3 ))слово1=слово<1 - найдет в выражениях "слово2 слово1" или "слово3 слово1" слово1 и заменит его на слово<1 Не стесняйся эксперементировать и спрашивать! Удачи!

wasyaka: Спасибо. вОды || а в брызгах воды сверкала радуга. Себя вОды || в трюме, где воды - несколько несчастных кубометров? вОды || вЕчераъ не могли воды набрать, чтобы пораньше вОды || вшестером без продовольствия, воды и связи с вОды || доложишь. А насчет воды пошли к нам вОды || зеленом колеблющемся полумраке воды маячили лИцаъ людей, вОды || И дай человеку воды, твою мать, - он вОды || И пусть бойцы воды побольше натаскают. Всеъ вОды || из за отсутствия воды. вОды || море исчезла полусфера воды, - и по сей водЫ || набрал из крана воды - казалось, у него вОды || наличии продовольствия и воды. Его группа выросла вОды || напоминал кошмарные видЕния. воды недоставало. Люди, исхудавшие вОды || ним, блестя капельками воды, подошли Жмакин и вОды || Отдышись пока, только воды не пей, - видя, вОды || почти не требовал воды, а сейчас всё вОды || причем не просто воды, а сладкой. И вОды || пыталась залить пригоршнями воды огонь. вОды || разоружили, не давали воды и еды, держали вОды || раскрасневшиеся, с каплями воды на загорелом теле, вОды || расслабятся, перекусят и воды попьют. Они пошли вОды || с несколькими глоткАмиъ воды. Но это не вОды || содержащейся в чашке воды. Дело в ощущении водЫ || сразу несколько кружек воды. вОды || сразу предупредил, что воды мало - водопровод не вОды || Среди пены и воды мелькали толстые щупальцеподобные вОды || Тело категорически требовало воды. Пришлось идти в вОды || Тит попросил воды. Небесный подумал о вОды || только одно. Следы воды на теле отсутствуют. вОды || участки травы и воды. Вот эскалатор, ведущий вОды || хотя утекло немало воды. добавил к этому: #(?i)(?<=(2|блеск|бутыл[ко]|глоток|глотков|запас|кружк|литр|напи(л|ться)|пленк|стакан)[^\.,!?-]{0,30})\bводы\b=воды< получилось: #(?i)(?<=(2|блеск|бутыл[ко]|глот(кам|ками|ков|ок)|запас|капельками|капл(ей|ю|я|ями)|кран|круж(ек|ка|ке|ку)|литр|напи(лись|лся|ться)|насчет|отсутстви(ем|и|ю|я)|немало|пены|пленк|полумра(ке|ку)|полусфера|попросил|пригоршнями|продовольствия|продовольствия\,|просто|след|стакан|травы|требова(л|ла|ли|ло|лось)|чашк(а|е|и|ой|у)|челове(ка|ком|ку))[^\.,!?-]{0,30})\bводы\b=водЫ к Возможно ли прикрутить запятую , чтоб не дублировать слово. И тире заодно?

odinokiyklaus: Речь идёт о Николае? |продовольствия\,| - запятую экранировать не надо - это не оператор типа точки, а просто один из символов. Прикрутить запятую можно, как напишете так и будет искать 2| - по моему бессмысленный оператор. "2 капли воды" что-ли? может всё-таки так "две капли воды" (ек|ка|ке|ку) - оператор скобки выделяет память для обработки, чтобы к этому фрагменту можно было обратиться позднее ($1 - после знака равно стоит обращение к скобкам 1 и т.п.) оператор перечня памяти не выделяет. я бы написал лучше так - [каеу]{2} и добавил бы еще окончаний: кой ками ках. В итоге получилось бы [каеойумих]{2,4} wasyaka пишет: Возможно ли прикрутить запятую , чтоб не дублировать слово. И тире заодно? не понял вопроса. Кажется догадался. Это |продовольствия\,| можно так написать |продовольствия[,]?| [,]? - ноль или один раз из перечня

odinokiyklaus: wasyaka пишет: И внекоторых рег. выражениях добавлен Ъ: Лично я в своих правилах Ъ знак добавляю за тем, чтобы последующие выражения не смогли второй раз обработать искомое слово. Тут требуется пояснение. В KoobAudio реализованая великолепная задумка (подробнее смотри справку) - любые выражения, расположенные в словарях в основной папке (то есть не в папках 1 и 2), слово которое уже было обработано проигнорируют. Однако, обработка уже обработанного слова сможет и будет сделана в папке постобработки (папке 2). Чтобы этого не было сделано лично я вставляю перед знаком ударения Ъ знак. То есть делаю выражения такого типа #(?i)(?<=\b((без|возле|мимо|выше|ниже|дальше|ближе|для|до|из|оба|от|с|у|вместо|вдоль|вглубь|внутр[ьи]|снаружи|вне|вокруг|около|кроме|глубине|посреди|напротив|против|всего|из([ -]за|[ -]под)?|нет|ни|об[ае]|дв[ае]|три|четыре|одной|другой|первой|второй|следующей)\s(его|е[её]|их|моей|твоей|своей|нашей|моего|твоего|своего|нашего|того|этого|сего|той)?)\b[^\.,!?-]{0,1})\bадреса\b=аъ<дреса

wasyaka: odinokiyklaus Большое спасибо. Вопрос: ...|год|давлени[емюя]{1,2}....{0,30})\bвойны\b=войнЫ сработало: давлением войнЫ, -- годы войнЫ; годом войнЫ удалил квадратно-фигурные скобки, оставил: |давлени| -- результат тотже. т.е в скобках только заданные окончания, а если без них, то слово получается"безконечным"? В смысле сработает на непонятно что(годные и т.д.?

odinokiyklaus: Можно всё увидеть выражение?

wasyaka: #(?i)(?<=\b(алтар|\bдве\b|близос[итью]{2,3}|будто|вопрос|год|давлени|дат[аеуой]{1,2}|демон|день|дн|задач|зако[ануыомих]{1,}|истори[ийюя]|командор|круговорот|мастер|машин|месяц|навык|начал|недел|окончани|отголоск[иахом]{1,2}|перво[гйо]{2}|пепл|период|планетарий|после|правд|реали[ий]|середин|сердц|судьб[аыойюе]{1,2}|\bтри\b|тягот|тяжест|хо[дуеы]{1,2}|утечк|ча[сыамов]{1,2,3|}хотел|)[^\.,!?-]{0,30})\bвойны\b=войнЫ

odinokiyklaus: Понятно. Искомое выражение у вас такое wasyaka пишет: #(?i)(?<=\b(алтар|\bдве\b|близос[итью]{2,3}|будто|вопрос|год|давлени|дат[аеуой]{1,2}|демон|день|дн|задач|зако[ануыомих]{1,}|истори[ийюя]|командор|круговорот|мастер|машин|месяц|навык|начал|недел|окончани|отголоск[иахом]{1,2}|перво[гйо]{2}|пепл|период|планетарий|после|правд|реали[ий]|середин|сердц|судьб[аыойюе]{1,2}|\bтри\b|тягот|тяжест|хо[дуеы]{1,2}|утечк|ча[сыамов]{1,2,3|}хотел|)[^\.,!?-]{0,30})\bвойны\b=войнЫ #(?i)(?<=\b(искомое выражение)[любые символы кроме . , ! ? -]{0,30})\bвойны\b=войнЫ \b(искомое выражение) - искомое выражение начинается с того что перечислено в скобках и далее следом за искомым выражением идут любые символы, кроме . , ! ? - (то есть буквы, цифры, пробелы, и т.д) в количестве от нуля до 30 штук. В этот промежуток [^\.,!?-]{0,30} и укладываются все ваши окончания которые могут встречаться. Таким образом может быть обработано не только выражение близос[итью]{2,3} - близости близостью, но и "близос"[тя] + "ми" или "близос"[тя] +"тратататата" и т.д, потому что "ми" и "тратататата" полностью укладываются в диапазон идущий следом - [^\.,!?-]{0,30} Чтобы ограничить искомое выражение с двух сторон следует использовать \b(искомое выражение)\b \bвсе - найдет слово всех, всеми всеобщий и т.д \bвсе\b - найдет толюко слово все То есть если вы напишите вот такое выражение #(?i)(?<=\b(искомое выражение)\b[любые символы кроме . , ! ? -]{0,30})\bвойны\b=войнЫ то у вас будет находить только выражения "близости войны" "близостью тратата войны" и т.д.

odinokiyklaus: Заметил ошибки |утечк|ча[сыамов]{1,2,3|}хотел|) |утечк|ча[сыамов]{1,2,3|}хотел|) Так писать нельзя. Можно так {1,2} -"от одного до двух", {1,3} "от одного до трёх". Но не так - {1,2,3} Внутри квантификатора {} симол | не допускается. Можно только одну или дву цифры и запятую - {2} {,6} {5,} {5,10}. хотел|) посли хотел идет | и правая скобка. Раз между ними нет символа - то значит будет обрабатываться "пустой" - читай любой симсол. Такие выраджения типа этого (хотел|) вообще недопустимы То есть пример выражение #(?i)(?<=\b(хотел|)\b[^\.,!?-]{0,30})\bвойны\b=войны найдет не только хотел войны но и хотелтратата войны так как обработает пустой симовол |) в количестве от нуля до 30-ти раз. Вот как правильно отработает

wasyaka: odinokiyklaus Спасибо за ученье.

wasyaka: odinokiyklaus Спасибо за ученье. Если интересно: Это .chisla.rex из балаболки https://yadi.sk/d/FqhjDZs6uQQS5 Работает эффективней чем "числительные". если сможете и интересно - алгоритм замен .рекс в дик.

odinokiyklaus: Перевел ваш словарь из rex в dic Алгоритм 1. Замена @ (в Балаболке это символ НЕ игнорировать регистр) на выражение (?-i) (В рег. выр. НЕ игнорировать регистр так описывается) 2. Замена # (в Балаболке это комментарии) на // - (в KoobAudio это комментарии) 3. Замена \r\n на выражение \r\n# - все рег. выражения в KoobAudio должны начинаться с символа # 4. Поскольку в оригинальном словаре (строки 521-525, 578) в рег. выражениях встречается выражение :$21: и тому подобное, то возникает ошибка, и такие правила не обрабатываются. Поясню, в рег. выражении после знака равно "=" стоит выражение на которое меняется искомое выражение. После символа $ должна стоять цифра от 1 до 9 (это ссылка на скобку (группу) в искомом выражении. (Пример #(\d)(\d)=$1 - здесь будет напечатано только первая цифра, обрамлённая первой группой скобок) . Если после символа $ встретится две подряд идущие цифры, то такое выражение будет проигнорировано и не обработано (#\b([0]?1)<t([a-z])(\d)>=<$1:$21:t$3> - в выражении перед = нет 21 группы). Чтобы правила в строках 521-525, 578 были обработаны правильно я разделил в выражении :$21: символы $2 и 1 знаком @. После корректной отработки этих выражений символ @ удаляется. Поэтому в исправленном словаре, добавлены два дополнительных правила #:([a-z])@(\d):=:$1$2: (строки 531 и 580). Ссылки на словари (там же сравнение результатов обработки старого и нового словаря) - https://yadi.sk/d/EjYyUpK4uUPDo Пользуйтесь на здоровье!

odinokiyklaus: Забыл добавить. Чтобы числительные работали корректно, этот словарь должен быть помещён только в паку 1 (папка предварительной обработки). В общей папке (где по умолчанию лежит словарь Числительные.dic) новый словарь не будет правильно работать. Словарь Числительные_KoobAudio можно отключить, а можно и оставить. P.S. Чтение чисел стало значительно лучше (использую оба словаря), но время обработки заметно увеличилось. Но пока это не критично.

wasyaka: odinokiyklaus Ещё раз(неоднократно) спасибо. Вопросы:(ко всем пользователям) 1.Возможно ли прописать(рег), чтобы после названия книги, главы и т.д. ставилась точка? Чтоб читалось раздельно? Владимир Стрельников Ссыльнопоселенец 2.Возможно ли в KooBAudio применить теги для смены голоса(прочтение сносок, антоннация ит.д.) <VOICE REQUIRED="NAME=IVONA 2 Tatyana OEM"> (текст) </VOICE> (это Балаболка и MP3book2005)

MoppoH2: wasyaka пишет: 1.Возможно ли прописать(рег), чтобы после названия книги, главы и т.д. ставилась точка? Чтоб читалось раздельно? (?m)([А-я])$=$1.

wasyaka: MoppoH2 пишет: wasyaka пишет:  цитата: 1.Возможно ли прописать(рег), чтобы после названия книги, главы и т.д. ставилась точка? Чтоб читалось раздельно? (?m)([А-я])$=$1. Не работает. Для балаболки в rex методом тыка подобрал ([A-Za-zА-яЁё])(\r)=$1.

odinokiyklaus: wasyaka пишет: 2.Возможно ли в KooBAudio применить теги для смены голоса(прочтение сносок, антоннация ит.д.)  цитата: <VOICE REQUIRED="NAME=IVONA 2 Tatyana OEM"> (текст) </VOICE> (это Балаболка и MP3book2005) Режим Билингво пробовали? Может там это уже реализовано? (сразу скажу, я не пробовал).

wasyaka: odinokiyklaus пишет: ежим Билингво пробовали? Может там это уже реализовано? (сразу скажу, я не пробовал). Билингво - это чтение латиницы. в словаре chisla нашел ошибку:(в оригинале 167) (\bв\b)\s((\bначале\b|\bконце\b|\bсередине\b|(\bпервой\b|\bвторой\b)\s\bполовине\b)\s)(\d+)<рим\.ч\.>\s(\bв\.|\bвека\b)=$1 $2$5<td6> века(<td6>заменить на <td2>)(ом на ого) Попытался улучшить навроде 40-41х и 40-41-х (Игнор первой цифры) #(\d+)(\-)(\d+)([A-Za-zА-яЁё]+)=$1$4 $3$4 #(\d+)(\-)(\d+)(\-)([A-Za-zА-яЁё]+)=$1$4$5 $3$4$5 Срабатывает, но длинный пробел(2или3) и ]+) - его роль? и// Коррекция омографов #(?-i)\bАдреса\b=адреса #(?-i)([а-я]) \bАнгара\b=$1 АнгарА #(?-i)([а-я]) \bангара\b=$1 ангАра #(?-i)\bАнгара\b=ангара #(?-i)([а-я]) \bАнгаре\b=$1 АнгарЕ #(?-i)([а-я]) \bангаре\b=$1 ангАре #(?-i)\bАнгаре\b=ангаре #(?-i)([а-я]) \bАнгару\b=$1 АнгарУ #(?-i)([а-я]) \bангару\b=$1 ангАру #(?-i)\bАнгару\b=ангару #(?-i)([а-я]) \bАнгары\b=$1 АнгарЫ #(?-i)([а-я]) \bангары\b=$1 ангАры #(?-i)\bАнгары\b=ангары #(?-i)([а-я]) \bБаку\b=$1 БакУ #(?-i)([а-я]) \bбаку\b=$1 бАку #(?-i)\bБаку\b=баку #(?-i)([а-я]) \bВали\b=$1 ВАли #(?-i)([а-я]) \bвали\b=$1 валИ #(?-i)\bВали\b=вали #(?-i)([а-я]) \bВарвары\b=$1 ВарвАры #(?-i)([а-я]) \bварвары\b=$1 вАрвары #(?-i)\bВарвары\b=варвары #(?-i)([а-я]) \bВари\b=$1 ВАри #(?-i)([а-я]) \bвари\b=$1 варИ #(?-i)\bВари\b=вари #(?-i)([а-я]) \bВарю\b=$1 ВАрю #(?-i)([а-я]) \bварю\b=$1 варЮ #(?-i)\bВарю\b=варю #(?-i)([а-я]) \bВаря\b=$1 ВАря #(?-i)([а-я]) \bваря\b=$1 варЯ #(?-i)\bВаря\b=варя #(?-i)([а-я]) \b\Волковb=$1 ВОлков #(?-i)([а-я]) \bволков\b=$1 волкОв #(?-i)\b\Волковb=волков #(?-i)([а-я]) \bГоспода\b=$1 ГОспода #(?-i)([а-я]) \bгоспода\b=$1 господА #(?-i)\bГоспода\b=господа #(?-i)\bЕгеря\b=егеря #(?-i)\bЕдим\b=едим #(?-i)\bЕду\b=еду #(?-i)\bЕлей\b=елей #(?-i)([а-я]) \bЖене\b=$1 ЖЕне #(?-i)([а-я]) \bжене\b=$1 женЕ #(?-i)\bЖене\b=жене #(?-i)([а-я]) \bЖеню\b=$1 ЖЕню #(?-i)([а-я]) \bженю\b=$1 женЮ #(?-i)\bЖеню\b=женю #(?-i)([а-я]) \bЖуков=$1 ЖУков #(?-i)([а-я]) \bжуков\b=$1 жукОв #(?-i)\bЖуков=жуков #(?-i)\bИванов\b=иванов #(?-i)\bИглы\b=иглы #(?-i)\bИгры\b=игры #(?-i)\bИзбегавший\b=избегавший #(?-i)\bИзбы\b=избы #(?-i)\bИзверг\b=изверг #(?-i)\bИзложите\b=изложите #(?-i)\bИзменитесь\b=изменитесь #(?-i)\bИзмениться\b=измениться #(?-i)\bИзменяться\b=изменяться #(?-i)\bИкры\b=икры #(?-i)\bИстому\b=истому #(?-i)([а-я]) \bКатя\b=$1 КАтя #(?-i)([а-я]) \bкатя\b=$1 катЯ #(?-i)\bКатя\b=катя #(?-i)([а-я]) \bКольца\b=$1 кольца #(?-i)Кольца ([А-Я])=кОльца $1 #(?-i)\bКольца\b=кольца #(?-i)([а-я]) \bКолю\b=$1 КОлю #(?-i)([а-я]) \bколю\b=$1 колЮ #(?-i)\bКолю\b=колю #(?-i)Лица ([А-Я])=ЛицА $1 #(?-i)([а-я]) \bЛуки\b=$1 ЛукИ #(?-i)([а-я]) \bлуки\b=$1 лУки #(?-i)(\bЛуки\b=луки #(?-i)([а-я]) \bМаксиме\b=$1 МаксИме #(?-i)([а-я]) \bмаксиме\b=$1 мАксиме #(?-i)\bМаксиме\b=максииме #(?-i)([а-я]) \bМарселя\b=$1 МарсЕля #(?-i)([а-я]) \bмарселя\b=$1 марсЕля #(?-i)\bМарселя\b=марселя #(?-i)([а-я]) \bМастера\b=$1 МАстера #(?-i)([а-я]) \bмастера\b=$1 мастера #(?-i)\bМастера\b=мастера #(?-i)([а-я]) \bМаши\b=$1 МАши #(?-i)([а-я]) \bмаши\b=$1 машИ #(?-i)\bМаши\b=маши #(?-i)([а-я]) \bМашина\b=$1 МАшина #(?-i)([а-я]) \bмашина\b=$1 машИна #(?-i)\bМашина\b=машина #(?-i)([а-я]) \bМашину\b=$1 МАшину #(?-i)([а-я]) \bмашину\b=$1 машИну #(?-i)\bМашину\b=машину #(?-i)\bОбитая\b=обитая #(?-i)\bОблака\b=облака #(?-i)\bОблачка\b=облачка #(?-i)\bОбломиться\b=обломиться #(?-i)\bОбману\b=обману #(?-i)\bОбмер\b=обмер #(?-i)\bОбнимите\b=обнимите #(?-i)\bОбразными\b=образными #(?-i)\bОбручу\b=обручу #(?-i)\bОбсыпав\b=обсыпав #(?-i)\bОбходите\b=обходите #(?-i)\bОвцы\b=овцы #(?-i)\bОдержим\b=одержим #(?-i)\bОзера\b=озера #(?-i)\bОзерца\b=озерца #(?-i)\bОкажите\b=окажите #(?-i)\bОкажитесь\b=окажитесь #(?-i)\bОкна\b=окна #(?-i)\bОкруга\b=округа #(?-i)\bОкруге\b=округе #(?-i)\bОплачу\b=оплачу #(?-i)\bОпустите\b=опустите #(?-i)\bОрдена\b=ордена #(?-i)\bОрдера\b=ордера #(?-i)\bОрды\b=орды #(?-i)\bОсел\b=осел #(?-i)\bОстановитесь\b=остановитесь #(?-i)\bОстрова\b=острова #(?-i)\bОстроты\b=остроты #(?-i)\bОсушите\b=осушите #(?-i)\bОсы\b=осы #(?-i)\bОсыпаться\b=осыпаться #(?-i)\bОтбегали\b=отбегали #(?-i)\bОтбегаю\b=$отбегаю #(?-i)\bОтводите\b=отводите #(?-i)\bОтложите\b=отложите #(?-i)\bОтмели\b=отмели #(?-i)\bОтмените\b=отмените #(?-i)\bОтносите\b=относите #(?-i)\bОтогнут\b=отогнут #(?-i)\bОтпадал\b=отпадал #(?-i)\bОтползавшим\b=отползавшим #(?-i)\bОтпуска\b=отпуска #(?-i)\bОтпустите\b=отпустите #(?-i)\bОтсек\b=отсек #(?-i)\bОтсеку\b=отсеку #(?-i)\bОтсыпал\b=отсыпал #(?-i)\bОтсыпаться\b=отсыпаться #(?-i)\bОтучиться\b=отучиться #(?-i)\bОтходите\b=отходите #(?-i)([а-я]) \bРогов\b=$1 РОгов #(?-i)([а-я]) \bрогов\b=$1 рогОв #(?-i)\bРогов\b=рогов #(?-i)([а-я]) \bРостовом\b=$1 РостОвом #(?-i)([а-я]) \bростовом\b=$1 ростовОм #(?-i)\bРостовом\b=ростовом #(?-i)\bСаньки\b=саньки #(?-i)\bСаньку\b=саньку #(?-i)([а-я]) \bСахаре\b=$1 СахАре #(?-i)([а-я]) \bсахаре\b=$1 сАхаре #(?-i)\bСахаре\b=сахаре #(?-i)([а-я]) \bСвету\b=$1 СвЕту #(?-i)([а-я]) \bсвету\b=$1 светУ #(?-i)\bСвету\b=свету #(?-i)([а-я]) \bТолика\b=$1 ТОлика #(?-i)([а-я]) \bтолика\b=$1 толИка #(?-i)\bТолика\b=толика #(?-i)([а-я]) \bТолстой\b=$1 ТолстОй #(?-i)([а-я]) \bтолстой\b=$1 тОлстой #(?-i)\bТолстой\b=толстой #(?-i)([а-я]) \bТома\b=$1 ТОма #(?-i)([а-я]) \bтома\b=$1 томА #(?-i)\bТома\b=тома #(?-i)\bУгольная\b=угольная #(?-i)\bУгольно\b=угольно #(?-i)\bУгольного\b=угольного #(?-i)\bУгольное\b=угольное #(?-i)\bУгольной\b=угольной #(?-i)\bУгольном\b=угольном #(?-i)\bУгольному\b=угольному #(?-i)\bУгольную\b=угольную #(?-i)\bУгольные\b=угольные #(?-i)\bУгольный\b=угольный #(?-i)\bУгольных\b=угольных #(?-i)\bУдалой\b=удалой #(?-i)\bУдержи\b=удержи #(?-i)\bУдержите\b=удержите #(?-i)\bУдержитесь\b=удержитесь #(?-i)\bУзами\b=узами #(?-i)\bУзды\b=узды #(?-i)\bУзнаем\b=узнаем #(?-i)\bУзнает\b=узнает #(?-i)\bУзнаете\b=узнаете #(?-i)\bУзнаешь\b=узнаешь #(?-i)\bУзнаю\b=узнаю #(?-i)\bУколов\b=уколов #(?-i)\bУложитесь\b=уложитесь #(?-i)\bУносите\b=уносите #(?-i)\bУпустите\b=упустите #(?-i)\bУстали\b=устали #(?-i)\bУстановите\b=установите #(?-i)\bУстою\b=устою #(?-i)\bУтопает\b=утопает #(?-i)\bУтопал\b=утопал #(?-i)\bУтопала\b=утопала #(?-i)\bУтра\b=утра #(?-i)\bУха\b=уха #(?-i)\bУхе\b=ухе #(?-i)\bУхи\b=ухи #(?-i)\bУходите\b=уходите #(?-i)\bУху\b=уху #(?-i)\bУчащая\b=учащая #(?-i)\bУчителя\b=учителя #(?-i), щеки ([А-Я])=, щёки $1 #(?-i)\bЭлектроплиты\b=электроплиты #(?-i)\bЭлектропровода\b=электропровода #(?-i)\bЮга\b=юга #(?-i)\bЮнкера\b=юнкера #(?-i)\bЯву\b=яву #(?-i)\bЯдра\b=ядра #(?-i)\bЯйца\b=яйца #(?-i)\bЯкоря\b=якоря // Навроде контрольной в школе...

odinokiyklaus: wasyaka пишет: в словаре chisla нашел ошибку:(в оригинале 167) (\bв\b)\s((\bначале\b|\bконце\b|\bсередине\b|(\bпервой\b|\bвторой\b)\s\bполовине\b)\s)(\d+)<рим\.ч\.>\s(\bв\.|\bвека\b)=$1 $2$5<td6> века(<td6>заменить на <td2>)(ом на ого) Я римскими числами из этого словаря вообще не пользуюсь. Меня напрягает, что из-за этих правил обработки римских чисел каждый введёный символ обрабатывается. Для себя я сделал по другому - перед словарем обработки чисел задал свои правила перевода римских чисел в арабские. И стало всё гораздо лучше. #(?-i)\b(XXXIX)\b=39<рим.ч.> #(?-i)\b(XXXVIII)\b=38<рим.ч.> #(?-i)\b(XXXVII)\b=37<рим.ч.> #(?-i)\b(XXXVI)\b=36<рим.ч.> #(?-i)\b(XXXV)\b=35<рим.ч.> #(?-i)\b(XXXIV)\b=34<рим.ч.> #(?-i)\b(XXXIII)\b=33<рим.ч.> #(?-i)\b(XXXII)\b=32<рим.ч.> #(?-i)\b(XXXI)\b=31<рим.ч.> #(?-i)\b(XXX)\b=30<рим.ч.> #(?-i)\b(XXIX)\b=29<рим.ч.> #(?-i)\b(XXVIII)\b=28<рим.ч.> #(?-i)\b(XXVII)\b=27<рим.ч.> #(?-i)\b(XXVI)\b=26<рим.ч.> #(?-i)\b(XXV)\b=25<рим.ч.> #(?-i)\b(XXIV)\b=24<рим.ч.> #(?-i)\b(XXIII?)\b=23<рим.ч.> #(?-i)\b(XXII)\b=22<рим.ч.> #(?-i)\b(XXI)\b=21<рим.ч.> #(?-i)\b(XX|ХХ)\b=20<рим.ч.> #(?-i)\b(XIX)\b=19<рим.ч.> #(?-i)\b(XVIII)\b=18<рим.ч.> #(?-i)\b(XVII)\b=17<рим.ч.> #(?-i)\b(XVI)\b=16<рим.ч.> #(?-i)\b(XV)\b=15<рим.ч.> #(?-i)\b(XIV)\b=14<рим.ч.> #(?-i)\b(XIII)\b=13<рим.ч.> #(?-i)\b(XII)\b=12<рим.ч.> #(?-i)\b(XI)\b=11<рим.ч.> #(?-i)\b(X|Х)\b=10<рим.ч.> #(?-i)\b(IX)\b=9<рим.ч.> #(?-i)\b(VIII)\b=8<рим.ч.> #(?-i)\b(VII)\b=7<рим.ч.> #(?-i)\b(VI)\b=6<рим.ч.> #(?-i)\b(V)\b=5<рим.ч.> #(?-i)\b(IV)\b=4<рим.ч.> #(?-i)\b(III)\b=3<рим.ч.> #(?-i)\b(II)\b=2<рим.ч.> Кроме того, из-за этих "римских правил" обработка выражений типа при И. Ю. Петре VIII I.B.M. Company становится совсем безобразным. Я для себя решил эту проблему и теперь это тестовое выражение обрабатывается корректно.

odinokiyklaus: wasyaka пишет: Попытался улучшить навроде 40-41х и 40-41-х (Игнор первой цифры) #(\d+)(\-)(\d+)([A-Za-zА-яЁё]+)=$1$4 $3$4 #(\d+)(\-)(\d+)(\-)([A-Za-zА-яЁё]+)=$1$4$5 $3$4$5 В этом словаре это реализуется по-другому Нужно в словаре найти этот блок правил #(?-i)\b(\d)(\d)(\d)(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.3.$1.> <10.2.$2.> <10.1.$3.> <10.0.$4.$5> <скл.пор.числ.кон.> #(?-i)\b(\d)(\d)(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.2.$1.> <10.1.$2.> <10.0.$3.$4> <скл.пор.числ.кон.> #(?-i)\b(\d)(\d)(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.2.$1.> <10.1.$2.> <10.0.$3.$4> <скл.пор.числ.кон.> #(?-i)\b(\d)(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.1.$1.> <10.0.$2.$3> <скл.пор.числ.кон.> #(?-i)\b(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.0.$1.$2> <скл.пор.числ.кон.> и вставить перед ним дополнительный блок правил #(?-i)\b(\d)(\d)(\d)(\d)\s?\-\s?(\d)(\d)(\d)(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.3.$1.> <10.2.$2.> <10.1.$3.> <10.0.$4.$9> <скл.пор.числ.кон.>-<скл.пор.числ.нач.> <10.3.$5.> <10.2.$6.> <10.1.$7.> <10.0.$8.$9> <скл.пор.числ.кон.> #(?-i)\b(\d)(\d)(\d)\s?\-\s?(\d)(\d)(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.2.$1.> <10.1.$2.> <10.0.$3.$7> <скл.пор.числ.кон.>-<скл.пор.числ.нач.> <10.2.$4.> <10.1.$5.> <10.0.$6.$7> <скл.пор.числ.кон.> #(?-i)\b(\d)(\d)\s?\-\s?(\d)(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.1.$1.> <10.0.$2.$5> <скл.пор.числ.кон.>-<скл.пор.числ.нач.> <10.1.$3.> <10.0.$4.$5> <скл.пор.числ.кон.> #(?-i)\b(\d)\s?\-\s?(\d)\s?\-\s?(\bый\b|\bй\b|\bого\b|\b\bому\b|\bым\b|\bм\b|\bя\b|\bй\b|\bю\b|\bе\b|\bх\b|\bые\b|\bми\b)=<скл.пор.числ.нач.> <10.0.$1.$3> <скл.пор.числ.кон.>-<скл.пор.числ.нач.> <10.0.$2.$3> <скл.пор.числ.кон.> wasyaka пишет: Срабатывает, но длинный пробел(2или3) и ]+) - его роль? Длины пробел должен быть еще в самом начале обработки любых правил заменён коротким. Проверьте наличие правила в словаре чисел. Если его нет, то добавьте в самое его начало. #\—|\–=- Кстати эти тире — или – или - вовсе не обязательно экранировать (т.е. писать так \-). Эти знаки не являются спецсимволами. Так что если напишите просто правило #—|–=- то оно тоже сработает wasyaka пишет: [A-Za-zА-яЁё]+ Символы в квадратных скобках без знака (квантификатора) "+" или "*" - означает любой один! из перечисленных символов. Знак "+" после [] т.е. []+ - тоже самое что и []{1,} - то есть любой из символов в количестве больше одного (один или более символов). "*" - то же только "ноль или более символов" Таким образом выражение "[A-Za-zА-яЁё]+" это любые символы из перечня, с учётом регистра букв, в количестве более одного.

odinokiyklaus: wasyaka пишет: Билингво - это чтение латиницы. Как я понял это чтение диалогов двумя голосами. Отличный режим для оживления Николая. Можно настроить тембр, скорость чтения в диалогах. ТО есть, к примеру, первый голос читает выше и быстрее (вопрошает), а второй басовитее и медленнее (отвечает раздумывая не поставленный вопрос).

odinokiyklaus: wasyaka пишет: Навроде контрольной в школе... По идее, это правила для обработки омографов - слов, в которых ударение ставится в зависимости от контекста или написания заглавной буквы. Здесь надо после большой гласной буквы "О" или "Ю" поставить знак ударения, чтобы получилось типа такого: #(?-i)([а-я]) \bКолю\b=$1 Ко<лю #(?-i)([а-я]) \bколю\b=$1 колю< #(?-i)\bКолю\b=колю В результате получится позвал Колю - будет "позвал Ко<лю" дрова колю - будет "дрова колю<" Колю - будет колю - почему то с маленькой буквы. Зачем не пойму.

wasyaka: odinokiyklaus пишет: Здесь надо после большой гласной буквы "О" или "Ю" поставить знак ударения, чтобы получилось типа такого: #(?-i)([а-я]) \bКолю\b=$1 Ко<лю #(?-i)([а-я]) \bколю\b=$1 колю< #(?-i)\bКолю\b=колю В результате получится позвал Колю - будет "позвал Ко<лю" дрова колю - будет "дрова колю<" Колю - будет колю - почему то с маленькой буквы. Зачем не пойму. Голос Максим click here Ударение заглавной буквой(гласной) Смысл: Если начальное слово строки соответственно написанное с заглавной омограф вручную или словарём. если в тексте то: Колю побили=КОлю побили; колю лёд=колЮ лёд; - омограф проставляется автоматом, а смысл вопроса : Правильно составлено рег выражение? ну и по числам: строка 340#(?i)(\bглава\b|\bчасть\b|\bкнига\b|\bсерия\b)\s(\d+)([^\-\d+])?=$1 $2-я$3... добавил (?i) иначе если Глава(с заглавной) не срабатывало) добавил стр. 372 #(\bмм\b)\s(\bмин\b)=миллиметровых $2 #(\bмм\b)\s(\bминомёт\b)=миллиметровый $2 #(\bмм\b)\s(\bминомёта\b)=миллиметрового $2 #(\bмм\b)\s(\bминомётами\b)=миллиметровыми $2 #(\bмм\b)\s(\bминомётом\b)=миллиметровым $2 #(\bмм\b)\s(\bорудие\b)=миллиметровое $2 #(\bмм\b)\s(\bорудия\b)=миллиметровые $2 #(\bмм\b)\s(\bорудиями\b)=миллиметровыми $2 #(\bмм\b)\s(\bснаряда\b)=миллиметрового $2 #(\bмм\b)\s(\bснаряды\b)=миллиметровые $2 #(\bмм\b)\s(\bых\b)=миллиметровых $2 В словарь corector у вас clean добавил(это всё для чисел) #(\d+)(\.)(\d+)(\.)(\d+)=$1$2 $3$4 $5 #(\d+)х(\d+)х(\d+)=$1 на $2 на $3 #(\d+)(\,)(\d+)х(\d+)=$1 $3 на $4 #(\d+)(\.)(\d+)=$1:$3 #от\s(\d+)(\.)\s(\d+)(\.)=от $1-го $3-го #с\s(\d+)(\.)\s(\d+)(\.)=с $1-го $3-го #что\s(\d+)(\.)\s(\d+)(\.)=что $1-го $3-го #и\s(\d+)(\.)\s(\d+)(\.)=и $1-го $3-го #по\s(\d+)(\.)\s(\d+)(\.)=по $1-е $3-е #за\s(\d+)(\.)\s(\d+)(\.)=за $1-е $3-е #(\d+)(\.)\s(\d+)(\.)=$1-го $3-го #\b(0)(\,)(\d+)=$1 $3 #(\d+)(\,)(\d+)=$1 и $3 И консультация: словарь е=ё (балаболка) очень громозкий, ели его в основную группу - конфликт(вздёрнул брОви). В папке 1 - тормоз,разделил словари на две группы 1-я (папка 1 + е=ё + все=всё + сокращения + транслит)) 2-Я омографы и обрабатываю в два прохода. - альтернатива? В принципе(в основном) голос Speech2Go ( 247_S2G_Maxim и 248_S2G_Tatyana) адаптировал под KooBAudio Ели интересно поделюсь. Образец https://yadi.sk/d/FrjLlH-gvSFd2

MoppoH2: да Максим и Татьяна имеют более человеческое произношение, но эти движки читают без интонаций, без знаков препинания или я просто привык к Николаю Образец https://yadi.sk/d/aKJNxneXvSXz3

odinokiyklaus: Всем привет! Тем кому удобно редактировать рег. выражения в замечательной программе Notepad++, рекомендую использовать настройки, которые эффективно подсвечивают их синтаксис. Если установка программы Notepad++ производилась по умолчанию, то её настройки будут располагаться по пути (для Windows 7): c:\Users\ИМЯ\AppData\Roaming\Notepad++\ В данную папку поместите файл userDefineLang.xml, а в папку themes - KoobAudio_Theme.xml После этого следует перейти по пути Опции->Определение стилей-> и далее выбрать тему KoobAudio_Theme Далее выбрать Стиль синтаксиса KoobAudio

wasyaka: Привет! Вопрос: Фраза:Кукловод #4Новый фантастический боевик (Эксмо) Приключения Кукловода продолжаются! рег #([A-Za-zА-яЁё])\s(#)(\d)=$1. книга $3 Получилось: Кукловод. книга четвёртая ...Новый фантастический боевик (Эксмо) Приключения Кукловода продолжаются! Возможно ли, чтобы после троеточия фраза начиналась с новой строки?

odinokiyklaus: wasyaka пишет: Возможно ли, чтобы после троеточия фраза начиналась с новой строки? Конечно! В любом месте можно сделать перенос строки. Для этого нужно после знака равно вставать последовательность символов \r\n, которые программа опознает как перенос строки. К примеру: #([A-Za-zА-яЁё])\s(#)(\d)=$1. книга $3 - заменить на #([A-Za-zА-яЁё])\s(#)(\d)=$1. \r\nкнига $3 В этом случае книга $3 будет перенесено на следующую строку. \r - перевод каретки в начало строки на которой вы находитесь \n - переход на новую строку с текущей строки

wasyaka: odinokiyklaus пишет: Конечно! В любом месте можно сделать перенос строки. Для этого нужно после знака равно вставать последовательность символов \r\n, которые программа опознает как перенос строки. СПАСИБО! Ну и вопрос: Сноска:[2 - Колония на Тобаго не оказала сопротивления Бриджесу и была полностью разграблена, правда, без кровопролития.]. надо заменить ] на </VOICE> ] = </VOICE> срабатывает [2 - Колония на Тобаго не оказала сопротивления Бриджесу и была полностью разграблена, правда, без кровопролития. на <VOICE REQUIRED="NAME=IVONA 2 Tatyana OEM"> - текст сноски с учётом изменяемым номером ссылки?

odinokiyklaus: wasyaka пишет: [2 - Колония на Тобаго не оказала сопротивления Бриджесу и была полностью разграблена, правда, без кровопролития. на <VOICE REQUIRED="NAME=IVONA 2 Tatyana OEM"> - текст сноски с учётом изменяемым номером ссылки? Вообще не понял.

wasyaka: odinokiyklaus пишет: Вообще не понял. Это для переключения на другой голос [2 - Колония на Тобаго не оказала сопротивления Бриджесу и была полностью разграблена, правда, без кровопролития.]. прочитает Максим. а при таком: <VOICE REQUIRED="NAME=IVONA 2 Tatyana OEM"> 2 - Колония на Тобаго не оказала сопротивления Бриджесу и была полностью разграблена, правда, без кровопролития. </VOICE>. Прочитает Татьяна. С помощью опции заменить(это в Балаболке) квадратные скобки меняются на теги, цифру(ы) приходится удалять вручную... Звучить так: https://yadi.sk/d/wRXuNST2w9g8T

odinokiyklaus: wasyaka пишет: Прочитает Татьяна. С помощью опции заменить(это в Балаболке) квадратные скобки меняются на теги, цифру(ы) приходится удалять вручную... Если нужно удалить только цифру, то поместите это правило куда-нибудь в предобработку. Оно удалит в выражении "[2 - Колония" это - "2 - ". В результате чего вместо этого "[2 - Колония" должно остаться "[Колония" #[\d+\s-\s(?=[А-ЯЁа-яё]+)=[

wasyaka: Привет! Камрады. Пытался зайти с ноута - Так всё секретно... - несмог побороть защиту от пользователей... Печально... Но... (после многочисленных тестирований) - лучшая прога для работы (начальной подготовки с словарям). Но, читалка, -попирание прав человека... Несколько вопросов: |!вырва|- для чего !знак? [\S]- ???

MoppoH2: wasyaka пишет: |!вырва|- для чего !знак? чтобы не добавить еще раз это сочетание в рег выражение, так как оно встречается с обоими омографами, ! не дает искать это словосочетание, знак ! не принципиально можно было бы использовать любой знак wasyaka пишет: [\S]- ??? ищет только в соседнем слове совпадение

wasyaka: MoppoH2 пишет: чтобы не добавить еще раз это сочетание в рег выражение, так как оно встречается с обоими омографами, ! не дает искать это словосочетание, знак ! не принципиально можно было бы использовать любой знак Спасибо. Эксперементировал. Перегонял в rex-на ! указывало ошибку и вся строка не работала.

wasyaka: odinokiyklaus пишет: Всем привет! Тем кому удобно редактировать рег. выражения в замечательной программе Notepad++, рекомендую использовать настройки, которые эффективно подсвечивают их синтаксис. Привет! А возможно прописать указание на ошибки(к имеющемуся \ вместо |)? И также в окне программы, где только нехватка или излишек скобок... А то приходится с помощью найти-заменить, что не всегда вовремя вспоминается... Ошибки: || пробел | | пробел \b\b (| |) Или как то прописать, чтоб автоматом?

odinokiyklaus: wasyaka пишет: Или как то прописать, чтоб автоматом? Не нашёл способа реализовать проверку на ощибки. Сам пользуюсь сначала визуальной проверкой правил и после проврекой в отлпдке словарей. Хотя.. есть же Spell Chеcker.. Вот бы его заюзать... подумаю

odinokiyklaus: В общем пока ничего толкового не придумал как отмечать те ошибки, о которых вы говорили. Единственно придумал - перенастроил синтаксис правил для Notepad++ Теперь в случае незакрытой скобки это становится видно сразу. Я так у себя уже несколько ошибок поймал. Как видно из картинки правило с ошибкой окрасолось в зелёный цвет после знака равенства. Синтаксические правила можно скачать по ссылке. Справку по Notepad++ можно посмореть здесь

wasyaka: odinokiyklaus пишет: В общем пока Спасибо, не думал что такая головоломка...



полная версия страницы