1

Тема: Регулярные выражения, вложенные (()()())

Господа гуру!
Подскажите как переписать регулярное выражение для поиска / замены через подстановочные знаки.
Имеются вот такие регулярки.

ищем "([॒॑])([ा-ौ]|[ॢॣ]|[ँंः])" меняем местами "\2\1"
"(([ा-ौ]|[ॢॣ]|[ँंः]|[॒॑])+)ρ","ρ\1"
"([क-ह]|[क़-य़])ρ","ρ\1" эта нормально работает вроде
"((([क-ह]|[क़-य़])्)+)ρ","ρ\1"
"i((([क-ह]|[क़-य़])्)+)","\1i"
"i([क-ह]|[क़-य़])","\1ि" эта нормально работает вроде
"([१३])(([॒॑])+)","\1"

После недолгих экспериментов пришел к выводу, что не умеет поддерживать вложенные условия (()())
В екселе прекрасно работают.
Помогите, очень срочно нужно.
Заранее спасибо.
Обработываю через C# но впринципе это не важно
Использую

Word.Find find = app.Selection.Find;
                    string finds = listView1.Items[s].Text; // строка для поиска
                    find.Text = finds;
                    string fonts = txB_NAME_FONT.Text;
                    find.Font.Name = fonts; // поисковый шрифт
                    find.Replacement.ClearFormatting();
                    string Repl = listView1.Items[s].SubItems[1].Text; //строка для замены
                    Repl = Repl.Replace("\r", string.Empty); 
                    find.Replacement.Text = Repl;
                    Object wrap = Word.WdFindWrap.wdFindContinue;
                    Object replace = Word.WdReplace.wdReplaceAll;
                    if ((s == 14) || (s == 199))
                    {
                        find.Text = "";
                        if ((finds.IndexOf("[") > 0)||(finds.IndexOf("]") > 0))
                        {
                            find.Text = "";
                            find.Text = finds;
                        }
                        else
                        {
                            find.Text = "";
                            find.Text = "[" + finds + "]"; //оборачиваем в скобки, иначе исключение для регулярок
                        }
                        find.Execute(FindText: Type.Missing,
                         MatchCase: false,
                         MatchWholeWord: false,
                         MatchWildcards: true, // включаем регулярки
                         MatchSoundsLike: missing,
                         MatchAllWordForms: false,
                         Forward: true,
                         Wrap: wrap,
                         Format: true,
                         ReplaceWith: missing, Replace: replace);
                    }

2

Re: Регулярные выражения, вложенные (()()())

Вставьте данное выражение "(([ा-ौ]|[ॢॣ]|[ँंः]|[॒॑])+)ρ" в Поиск/Замена (с включенной галочкой - Подстановочные знаки) в Ворде и просто нажмите поиск.
Выдаст ошибку в выражении, это индийские верамы(язык я имею ввиду) представьте что там латиница, от этого ничего не поменяется.
(([A-D]|[GT]|[1-5]|[POS])+)ρ

3

Re: Регулярные выражения, вложенные (()()())

Kreol2013 пишет:

...После недолгих экспериментов...

Переход от полноценных регулярных выражений к подстановочным знакам Word проблематичен, ибо разница в сложности на порядок. Например, в Word нет аналога для условия или (|).

Метод тыка, вопросы на форуме... это время можно потратить на чтение. Вся дока о подстановочных знаках Word умещается на 1 страницу smile
внешняя ссылка

Макросы под заказ и готовый пакет - mtdmacro.ru