Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поговорим про RegExp? - Страница 8 - Мир MS Excel

Старая форма входа
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Поговорим про RegExp? (Подготовка для топика FAQ по RegExp в Готовых решениях)
Поговорим про RegExp?
Alex_ST Дата: Четверг, 22.12.2011, 12:32 | Сообщение № 141
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (v__step)
Иванов[а|ы|ым|у]*

Не проходит, я уже пробовал: либо пробел после слова прихватывается (а он есть не всегда, может быть и всякая пунктуация), либо (если после * не ставить пробел), то и Иванович прихватывается



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (v__step)
Иванов[а|ы|ым|у]*

Не проходит, я уже пробовал: либо пробел после слова прихватывается (а он есть не всегда, может быть и всякая пунктуация), либо (если после * не ставить пробел), то и Иванович прихватывается

Автор - Alex_ST
Дата добавления - 22.12.2011 в 12:32
v__step Дата: Четверг, 22.12.2011, 12:35 | Сообщение № 142
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Quote (Alex_ST)
Иванов[а|ы|ым|у]
Написал было, но заметил опечатку уже у себя. Повторно:"Иванов(а|ы|ым|у)*". Список в скобках не полный. Еще 1 пример: "Принц и принцесса". Шаблон: "принц(есса)*"
В обоих случаях "+" не сработает - только "*"


С уважением, Владимир
 
Ответить
Сообщение
Quote (Alex_ST)
Иванов[а|ы|ым|у]
Написал было, но заметил опечатку уже у себя. Повторно:"Иванов(а|ы|ым|у)*". Список в скобках не полный. Еще 1 пример: "Принц и принцесса". Шаблон: "принц(есса)*"
В обоих случаях "+" не сработает - только "*"

Автор - v__step
Дата добавления - 22.12.2011 в 12:35
Alex_ST Дата: Четверг, 22.12.2011, 12:40 | Сообщение № 143
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Я смотрю, Володя, мы с тобой наперегонки удаляем свои поспешные посты smile
Список в скобках пополнить не проблема. Главное, как не прихватить лишнего, того, что не входит в список? Ведь метасимвол "конец слова" с кириллицей не пашет sad



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеЯ смотрю, Володя, мы с тобой наперегонки удаляем свои поспешные посты smile
Список в скобках пополнить не проблема. Главное, как не прихватить лишнего, того, что не входит в список? Ведь метасимвол "конец слова" с кириллицей не пашет sad

Автор - Alex_ST
Дата добавления - 22.12.2011 в 12:40
v__step Дата: Четверг, 22.12.2011, 13:00 | Сообщение № 144
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

А ты сейчас и не поднимал вопрос о конце света слова
Вопрос с разделителями слов не простой, но, скорее всего, не безнадежный
Если ты об этом, давай, на вечер
Вообще, лучше проблему конкретизировать (решение зависит от тех самых мелочей в коих сокрыт...)


С уважением, Владимир

Сообщение отредактировал v__step - Четверг, 22.12.2011, 13:19
 
Ответить
СообщениеА ты сейчас и не поднимал вопрос о конце света слова
Вопрос с разделителями слов не простой, но, скорее всего, не безнадежный
Если ты об этом, давай, на вечер
Вообще, лучше проблему конкретизировать (решение зависит от тех самых мелочей в коих сокрыт...)

Автор - v__step
Дата добавления - 22.12.2011 в 13:00
Alex_ST Дата: Четверг, 22.12.2011, 14:01 | Сообщение № 145
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Вопрос чисто академически-познавательный:
Есть "корень" (условно, конечно) слова и ограниченный набор его окончаний.
Необходимо выделить из текста слова, состоящие из корня с любым из заданных окончаний и не прихватить при этом те слова, что имеют тот же корень, но их окончание не входит в список?
Задача, как я понимаю, усложняется тем, что метасимволы "конец слова" с кириллицей не работают.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеВопрос чисто академически-познавательный:
Есть "корень" (условно, конечно) слова и ограниченный набор его окончаний.
Необходимо выделить из текста слова, состоящие из корня с любым из заданных окончаний и не прихватить при этом те слова, что имеют тот же корень, но их окончание не входит в список?
Задача, как я понимаю, усложняется тем, что метасимволы "конец слова" с кириллицей не работают.

Автор - Alex_ST
Дата добавления - 22.12.2011 в 14:01
v__step Дата: Четверг, 22.12.2011, 14:16 | Сообщение № 146
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Quote (Alex_ST)
Задача, как я понимаю, усложняется тем, что метасимволы "конец слова" с кириллицей не работают.
А зачем искать конец слова? Проверь, шаблон поста 142 работает для текста любой сложности с произвольным количеством каких угодно разделителей
Проблема в программном составлении конкретного шаблона. Это отдельный вопрос. Нужна постановка задачи


С уважением, Владимир

Сообщение отредактировал v__step - Четверг, 22.12.2011, 14:34
 
Ответить
Сообщение
Quote (Alex_ST)
Задача, как я понимаю, усложняется тем, что метасимволы "конец слова" с кириллицей не работают.
А зачем искать конец слова? Проверь, шаблон поста 142 работает для текста любой сложности с произвольным количеством каких угодно разделителей
Проблема в программном составлении конкретного шаблона. Это отдельный вопрос. Нужна постановка задачи

Автор - v__step
Дата добавления - 22.12.2011 в 14:16
Alex_ST Дата: Четверг, 22.12.2011, 14:35 | Сообщение № 147
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (v__step)
Повторно:"Иванов(а|ы|ым|у)*"

Кто-то кого-то не понимает...
Есть строка. Например: Иванов Иванова Ивановы Иванович
Ты предлагаешь паттерн: Иванов(а|ы|ым|у)*
RegExp возвращает: Иванов║Иванова║Ивановы║Иванов
Т.е. произошёл "захват Ивановича" biggrin : Иванов Иванова Ивановы Иванович (ну, прямо как в Палестине smile )

Если же применить паттерн на Иванов(а|ы|ым|у)
то RegExp возвращает: Иванова║Ивановы
Т.е. "мы потеряли Иванова" cry : Иванов Иванова Ивановы Иванович



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Четверг, 22.12.2011, 14:50
 
Ответить
Сообщение
Quote (v__step)
Повторно:"Иванов(а|ы|ым|у)*"

Кто-то кого-то не понимает...
Есть строка. Например: Иванов Иванова Ивановы Иванович
Ты предлагаешь паттерн: Иванов(а|ы|ым|у)*
RegExp возвращает: Иванов║Иванова║Ивановы║Иванов
Т.е. произошёл "захват Ивановича" biggrin : Иванов Иванова Ивановы Иванович (ну, прямо как в Палестине smile )

Если же применить паттерн на Иванов(а|ы|ым|у)
то RegExp возвращает: Иванова║Ивановы
Т.е. "мы потеряли Иванова" cry : Иванов Иванова Ивановы Иванович

Автор - Alex_ST
Дата добавления - 22.12.2011 в 14:35
v__step Дата: Четверг, 22.12.2011, 14:45 | Сообщение № 148
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Дошло! Давай, попробуем такую абракадабру:
Иванов(а|ы|ым|у)?(?=[^a-zа-я])
Если в целом устроит, попробую объяснить (глядишь, и сам пойму), а потом дошлифуем

Ты видишь, я даже не включил заглавные буквы
Кстати, о птичках заглавных буквах
Обычно пишу их в шаблоне, а выше той же рукой аккуратно так выведено: .IgnoreCase = True... Слов нет!
Границ слов почему-то не боюсь (наверное, я из страны непуганых дураков)


С уважением, Владимир

Сообщение отредактировал v__step - Четверг, 22.12.2011, 23:06
 
Ответить
СообщениеДошло! Давай, попробуем такую абракадабру:
Иванов(а|ы|ым|у)?(?=[^a-zа-я])
Если в целом устроит, попробую объяснить (глядишь, и сам пойму), а потом дошлифуем

Ты видишь, я даже не включил заглавные буквы
Кстати, о птичках заглавных буквах
Обычно пишу их в шаблоне, а выше той же рукой аккуратно так выведено: .IgnoreCase = True... Слов нет!
Границ слов почему-то не боюсь (наверное, я из страны непуганых дураков)

Автор - v__step
Дата добавления - 22.12.2011 в 14:45
v__step Дата: Пятница, 23.12.2011, 09:31 | Сообщение № 149
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Я исправил "*" из предыдущего шаблона на "?", чтобы усилить определенность. Если мы работаем только с Кириллецей, лучше вместо [^a-zа-я] записать [^а-я]. Эта кроха найдет абсолютно все кроме а-я (пробелы, окончания строк и т.д.)
Вообще, я бы шел дуболомным путем, ведь пробел после слова может быть и пропущен...
Взял бы самый простой шаблон "Иванов(а|ы|ым|у)?", но до начала поиска заменил бы в исходной строке все нежелательные словоформы. В общем случае, когда интересны положения вхождений, заменил бы заполнителем ("Иванович" >> "@@@@@@@@"). А если нужны только Matches().Value, заменил бы на "".


С уважением, Владимир

Сообщение отредактировал v__step - Пятница, 23.12.2011, 09:40
 
Ответить
СообщениеЯ исправил "*" из предыдущего шаблона на "?", чтобы усилить определенность. Если мы работаем только с Кириллецей, лучше вместо [^a-zа-я] записать [^а-я]. Эта кроха найдет абсолютно все кроме а-я (пробелы, окончания строк и т.д.)
Вообще, я бы шел дуболомным путем, ведь пробел после слова может быть и пропущен...
Взял бы самый простой шаблон "Иванов(а|ы|ым|у)?", но до начала поиска заменил бы в исходной строке все нежелательные словоформы. В общем случае, когда интересны положения вхождений, заменил бы заполнителем ("Иванович" >> "@@@@@@@@"). А если нужны только Matches().Value, заменил бы на "".

Автор - v__step
Дата добавления - 23.12.2011 в 09:31
Alex_ST Дата: Пятница, 23.12.2011, 09:56 | Сообщение № 150
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Да ладно, Володя, не трать время.
Просто меня заинтеревовал пример, приведенный на Специальные символы и подстановочные знаки в операциях поиска и замены Microsoft Word 97, где, используя метод .Find, в конце статьи очень лихо меняют в выделении фамилию Иванов на фамилию Петров сразу во всех падежах путем замены Ивано([а-я]@>) на Петро\1
Но это синтаксис поиска-замены Ворда, а он очень похож на синтаксис RegExp.
Вот я и подумал, а нельзя ли сделать аналогично в VBA Excel ?
Ведь @ в Ворде - это ноль или более штук предыдущего символа или выражения, т.е. эквивалент {0,} или ? в RegExp
А > - это конец слова - эквивалент \b в RegExp
Но ведь \b с кириллицей не работает … sad



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Пятница, 23.12.2011, 13:54
 
Ответить
СообщениеДа ладно, Володя, не трать время.
Просто меня заинтеревовал пример, приведенный на Специальные символы и подстановочные знаки в операциях поиска и замены Microsoft Word 97, где, используя метод .Find, в конце статьи очень лихо меняют в выделении фамилию Иванов на фамилию Петров сразу во всех падежах путем замены Ивано([а-я]@>) на Петро\1
Но это синтаксис поиска-замены Ворда, а он очень похож на синтаксис RegExp.
Вот я и подумал, а нельзя ли сделать аналогично в VBA Excel ?
Ведь @ в Ворде - это ноль или более штук предыдущего символа или выражения, т.е. эквивалент {0,} или ? в RegExp
А > - это конец слова - эквивалент \b в RegExp
Но ведь \b с кириллицей не работает … sad

Автор - Alex_ST
Дата добавления - 23.12.2011 в 09:56
nerv Дата: Пятница, 23.12.2011, 11:16 | Сообщение № 151
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Quote (Alex_ST)
\s Любой пробельный символ кроме неразрывных пробелов, включая табуляцию, перевод строки, возврат каретки, перевод страницы. Эквивалентно [ \f\n\r\t\v]
\S Любой ВИДИМЫЙ символ или неразрывный пробел (любой непробельный символ). Эквивалентно [^ \f\n\r\t\v]

Может эта табличка пригодиться Классы символов регулярных выражений


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Quote (Alex_ST)
\s Любой пробельный символ кроме неразрывных пробелов, включая табуляцию, перевод строки, возврат каретки, перевод страницы. Эквивалентно [ \f\n\r\t\v]
\S Любой ВИДИМЫЙ символ или неразрывный пробел (любой непробельный символ). Эквивалентно [^ \f\n\r\t\v]

Может эта табличка пригодиться Классы символов регулярных выражений

Автор - nerv
Дата добавления - 23.12.2011 в 11:16
v__step Дата: Пятница, 23.12.2011, 11:57 | Сообщение № 152
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Спасибо!
Лёш, все-таки, посмотри, это интересно - ты не пожалеешь
"Иванов(а|ы|ым|у)?(?=[^а-я])"


С уважением, Владимир

Сообщение отредактировал v__step - Пятница, 23.12.2011, 12:02
 
Ответить
СообщениеСпасибо!
Лёш, все-таки, посмотри, это интересно - ты не пожалеешь
"Иванов(а|ы|ым|у)?(?=[^а-я])"

Автор - v__step
Дата добавления - 23.12.2011 в 11:57
Alex_ST Дата: Пятница, 23.12.2011, 14:43 | Сообщение № 153
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (v__step)
Ты видишь, я даже не включил заглавные буквы
А зря не включил!
Ведь мы делаем примеры для RegExp вообще, а не для конкретной твоей программы-тестера, который сам вставляет .IgnoreCase = True
Поэтому для универсальности примера лучше как раз усилить паттерн: [^a-zA-Zа-яА-ЯёЁ]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (v__step)
Ты видишь, я даже не включил заглавные буквы
А зря не включил!
Ведь мы делаем примеры для RegExp вообще, а не для конкретной твоей программы-тестера, который сам вставляет .IgnoreCase = True
Поэтому для универсальности примера лучше как раз усилить паттерн: [^a-zA-Zа-яА-ЯёЁ]

Автор - Alex_ST
Дата добавления - 23.12.2011 в 14:43
Alex_ST Дата: Пятница, 23.12.2011, 14:59 | Сообщение № 154
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, я, блин, динозавр замшелый …
Не обратил внимание, что форум перебрался на другую страничку. А на предыдущей мой пост от 09:56 последний. Я тыкаю регулярно "обновить" - никто ничего нового не отвечает. Ну, думаю, заняты все.
Извините, мужики!
Александр, спасибо за файл. Скачал. Посмотрел. Но пока не изучил.
Володя, Иванов(а|ы|ым|у)?(?=[^а-я]) отлично работает
Правда я его из твоего предыдущего поста ещё утром умудрился скопировать в тестер с лишним пробелом на конце и поэтому прихватывались пробелы, что мне, конечно, не понравилось, но тебя-то на форуме "не было", как мне казалось smile
Я для универсальности решения всё-таки ужесточил паттерн: Иванов(а|ы|ым|у)?(?=[^a-zA-Zа-яА-ЯёЁ])
Очень здорово получилось: даже переводы строки и знаки препинания, поставленные сразу после Иванова, RegExp не сбивают!
Теперь бы понять, как это работает...



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Пятница, 23.12.2011, 15:01
 
Ответить
СообщениеНу, я, блин, динозавр замшелый …
Не обратил внимание, что форум перебрался на другую страничку. А на предыдущей мой пост от 09:56 последний. Я тыкаю регулярно "обновить" - никто ничего нового не отвечает. Ну, думаю, заняты все.
Извините, мужики!
Александр, спасибо за файл. Скачал. Посмотрел. Но пока не изучил.
Володя, Иванов(а|ы|ым|у)?(?=[^а-я]) отлично работает
Правда я его из твоего предыдущего поста ещё утром умудрился скопировать в тестер с лишним пробелом на конце и поэтому прихватывались пробелы, что мне, конечно, не понравилось, но тебя-то на форуме "не было", как мне казалось smile
Я для универсальности решения всё-таки ужесточил паттерн: Иванов(а|ы|ым|у)?(?=[^a-zA-Zа-яА-ЯёЁ])
Очень здорово получилось: даже переводы строки и знаки препинания, поставленные сразу после Иванова, RegExp не сбивают!
Теперь бы понять, как это работает...

Автор - Alex_ST
Дата добавления - 23.12.2011 в 14:59
v__step Дата: Пятница, 23.12.2011, 15:38 | Сообщение № 155
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Лёш, ты предложил очень красивую задачу, я не мог не принять такой вызов!
Иванов это понятно
(а|ы|ым|у)? это тоже понятно (* пришлось заменить на ?, потому что нам не нужны лишние вхождения)
(?= это шапка просмотра вперед (как If, With)
[^a-zA-Zа-яА-ЯёЁ] это шаблон просмотра вперед (соответствующий текст будет найден, но не включен в результат)
) это хвост просмотра вперед (как End If, End With)
По поводу A-Zа-яА-ЯёЁ согласен
Для себя я всегда стараюсь применять решения "по месту", всячески избегаю лишних настроек приложения, лишних переменных, лишних опций. Это очень помогает, а часто просто спасает (синица в руке)


С уважением, Владимир

Сообщение отредактировал v__step - Пятница, 23.12.2011, 16:26
 
Ответить
СообщениеЛёш, ты предложил очень красивую задачу, я не мог не принять такой вызов!
Иванов это понятно
(а|ы|ым|у)? это тоже понятно (* пришлось заменить на ?, потому что нам не нужны лишние вхождения)
(?= это шапка просмотра вперед (как If, With)
[^a-zA-Zа-яА-ЯёЁ] это шаблон просмотра вперед (соответствующий текст будет найден, но не включен в результат)
) это хвост просмотра вперед (как End If, End With)
По поводу A-Zа-яА-ЯёЁ согласен
Для себя я всегда стараюсь применять решения "по месту", всячески избегаю лишних настроек приложения, лишних переменных, лишних опций. Это очень помогает, а часто просто спасает (синица в руке)

Автор - v__step
Дата добавления - 23.12.2011 в 15:38
Alex_ST Дата: Пятница, 23.12.2011, 16:15 | Сообщение № 156
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Володя, пришла мысль: вместо примеров на твоём листе "метасимволы+" поместить тестеры!
Начал. Здорово получается!
Но продолжить смогу только в понедельник...
Вот, посмотри начало:
К сообщению приложен файл: _RegExp_21_12_1.7z (65.4 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеВолодя, пришла мысль: вместо примеров на твоём листе "метасимволы+" поместить тестеры!
Начал. Здорово получается!
Но продолжить смогу только в понедельник...
Вот, посмотри начало:

Автор - Alex_ST
Дата добавления - 23.12.2011 в 16:15
v__step Дата: Пятница, 23.12.2011, 16:19 | Сообщение № 157
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Даже не глядя: Ok! (на работе у меня Wn98, поэтому не могу распаковать - дома посмотрю)


С уважением, Владимир

Сообщение отредактировал v__step - Пятница, 23.12.2011, 16:22
 
Ответить
СообщениеДаже не глядя: Ok! (на работе у меня Wn98, поэтому не могу распаковать - дома посмотрю)

Автор - v__step
Дата добавления - 23.12.2011 в 16:19
Alex_ST Дата: Пятница, 23.12.2011, 19:58 | Сообщение № 158
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (v__step)
не могу распаковать
а в zip'e архив весит больше разрешённых 100 кило sad



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (v__step)
не могу распаковать
а в zip'e архив весит больше разрешённых 100 кило sad

Автор - Alex_ST
Дата добавления - 23.12.2011 в 19:58
v__step Дата: Суббота, 24.12.2011, 13:02 | Сообщение № 159
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Последний штрих: [^a-zA-ZА-яёЁ] (В таблице ASC кириллица, в отличие от латиницы, идет подряд от А до я)

Похожее решение: Иванов(а|ы|ым|у)?(?![a-zA-ZА-яёЁ])
Я заменил "=" на "!" и убрал из набора "^"
Теперь наш просмотр вперед стал негативным

(?! это шапка негативного просмотра вперед (как If, With)
[a-zA-ZА-яёЁ] это шаблон негативного просмотра вперед (все кроме соответствующего текста будет найдено, но не включено в результат)
) это хвост негативного просмотра вперед (как End If, End With)

А еще ты подал красивую идею коротких и чистых примеров для "*" (очень не хватало)
В них, в отличие от многих других, приводимых в таблицах метасимволов, "*" нельзя заменить на "+" или "?"
Текст: "Иван Иваныч Иванов" Шаблон: "иван\S*"
Текст: "Триста тридцать три" Шаблон: "три\S*" и т.п.


С уважением, Владимир

Сообщение отредактировал v__step - Суббота, 24.12.2011, 14:51
 
Ответить
СообщениеПоследний штрих: [^a-zA-ZА-яёЁ] (В таблице ASC кириллица, в отличие от латиницы, идет подряд от А до я)

Похожее решение: Иванов(а|ы|ым|у)?(?![a-zA-ZА-яёЁ])
Я заменил "=" на "!" и убрал из набора "^"
Теперь наш просмотр вперед стал негативным

(?! это шапка негативного просмотра вперед (как If, With)
[a-zA-ZА-яёЁ] это шаблон негативного просмотра вперед (все кроме соответствующего текста будет найдено, но не включено в результат)
) это хвост негативного просмотра вперед (как End If, End With)

А еще ты подал красивую идею коротких и чистых примеров для "*" (очень не хватало)
В них, в отличие от многих других, приводимых в таблицах метасимволов, "*" нельзя заменить на "+" или "?"
Текст: "Иван Иваныч Иванов" Шаблон: "иван\S*"
Текст: "Триста тридцать три" Шаблон: "три\S*" и т.п.

Автор - v__step
Дата добавления - 24.12.2011 в 13:02
Alex_ST Дата: Четверг, 29.12.2011, 14:45 | Сообщение № 160
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Добиваю примеры...
Поднялся вопрос biggrin
Задача та же: фамилию Иванов с любым падежным окончанием (а|у|ым|е) заменить на фамилию Сидоров с теми же падежными окончаниями.
Ищем по шаблону Иванов(а|у|ым|е)?(?![a-zA-Zа-яА-ЯёЁ]) заменяем на Сидоров$1
Вопрос: как изменить шаблон чтобы кроме Иванов не прихватывался ещё и Ливанов ?
Я понимаю, что, наверное, проще всего сделать IgnoreCase = False, но всё-таки?

К стати, я сделал в тестере на каждом листе гульку, позволяющую оперативно управлять параметром IgnoreCase (все "гульки" связаны с одной и той же ячейкой-именованным диапазоном Е1=bIgnoreCase на листе "Метасимволы+"
Кроме того, разделители элементов коллекций Matches и SubMatches задаются в ячейках-именованных диапазонах I1=dlmMatches , L1=dlmSubMatches на листе "Метасимволы+"

И ещё: что-то никак не "докурю" как исправить код fRegExSubMatches чтобы не выводились разделители Matches когда SubMatches нет? Посмотри на листах. Будет понятнее, о чём говорю.
Или SubMatches всё-таки создаются, но пустые? Ведь формулы есть во всех ячейках столбца, куда выводятся SubMatches, а пустые разделители Matches - не везде? Что там теория RegExp говорит про то, при каких шаблонах SubMatches создаются и когда они создаются, но пустые?
К сообщению приложен файл: _RegExp_29_12_1.7z (69.3 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Пятница, 30.12.2011, 08:47
 
Ответить
СообщениеДобиваю примеры...
Поднялся вопрос biggrin
Задача та же: фамилию Иванов с любым падежным окончанием (а|у|ым|е) заменить на фамилию Сидоров с теми же падежными окончаниями.
Ищем по шаблону Иванов(а|у|ым|е)?(?![a-zA-Zа-яА-ЯёЁ]) заменяем на Сидоров$1
Вопрос: как изменить шаблон чтобы кроме Иванов не прихватывался ещё и Ливанов ?
Я понимаю, что, наверное, проще всего сделать IgnoreCase = False, но всё-таки?

К стати, я сделал в тестере на каждом листе гульку, позволяющую оперативно управлять параметром IgnoreCase (все "гульки" связаны с одной и той же ячейкой-именованным диапазоном Е1=bIgnoreCase на листе "Метасимволы+"
Кроме того, разделители элементов коллекций Matches и SubMatches задаются в ячейках-именованных диапазонах I1=dlmMatches , L1=dlmSubMatches на листе "Метасимволы+"

И ещё: что-то никак не "докурю" как исправить код fRegExSubMatches чтобы не выводились разделители Matches когда SubMatches нет? Посмотри на листах. Будет понятнее, о чём говорю.
Или SubMatches всё-таки создаются, но пустые? Ведь формулы есть во всех ячейках столбца, куда выводятся SubMatches, а пустые разделители Matches - не везде? Что там теория RegExp говорит про то, при каких шаблонах SubMatches создаются и когда они создаются, но пустые?

Автор - Alex_ST
Дата добавления - 29.12.2011 в 14:45
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Поговорим про RegExp? (Подготовка для топика FAQ по RegExp в Готовых решениях)
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!