Лёш, ну, ты точно еще не был на листе с примерами SubMatches. Сделать описание яснее и короче, чем у Форты, или чем на сайте авторов RegExp я не смогу, но примеры говорят сами за себя. Регулярные выражения лучше изучать "от примеров" (да разве только их...) Я старался - неделю сочинял шаблоны "по-русски" Давай скорей на лист с примерами шаблонов - они давно ждут тебя
Лёш, ну, ты точно еще не был на листе с примерами SubMatches. Сделать описание яснее и короче, чем у Форты, или чем на сайте авторов RegExp я не смогу, но примеры говорят сами за себя. Регулярные выражения лучше изучать "от примеров" (да разве только их...) Я старался - неделю сочинял шаблоны "по-русски" Давай скорей на лист с примерами шаблонов - они давно ждут тебяv__step
Неработающие \s и \S - это было сильно Лёш, бегло посмотрел лист, заметил, что слетели картинки на рисунке объектной модели Восстановил (прикладываю)
Кажется, наконец, подобрал нежирный шрифт с хорошим отображением мелких знаков (точек, запятых и т.д.) - Trebuchet MS. Он похоже еще и моноширинный (Courier не нравится - грубый)
Ты меня заитриговал Word-проблемой. Если можно, фрагменты файлов до и после все-таки покажи
Неработающие \s и \S - это было сильно Лёш, бегло посмотрел лист, заметил, что слетели картинки на рисунке объектной модели Восстановил (прикладываю)
Кажется, наконец, подобрал нежирный шрифт с хорошим отображением мелких знаков (точек, запятых и т.д.) - Trebuchet MS. Он похоже еще и моноширинный (Courier не нравится - грубый)
Ты меня заитриговал Word-проблемой. Если можно, фрагменты файлов до и после все-таки покажиv__step
Привет, народ! Я тут умудрился-таки, вооружившись макрорекордером и пошарив по примерам и справкам сети, состряпать макрос для Word, удаляющий многократные пробелы в тексте. Оказалось, что в окне "Найти и заменить" можно использовать шаблоны, очень похожие на шаблоны регулярных выражений ( ; в паттерне вместо запятой) Вот что получилось:[vba]
Код
Sub WDDeleteSpace() ' макрос Word для "Убрать многократные пробелы" With Selection.Find .Text = "[ ]{2;}" ' найти в Selection 2 и более пробелов .Replacement.Text = " " .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе End With Selection.Find.Execute Replace:=wdReplaceAll ' заменить во всех найденных End Sub
[/vba] Формат текста выделения не калечится даже в таблицах (с которыми Ворд вообще не дружит)! Осталось дополнить его убиранием лидирующих и финишных пробелов. А ещё бы, кто-нибудь подсказал паттерн для удаления пробелов перед знаками припинания... Список-то я составил: [.,:;\!\?\)] (к стати, а как в перечисление добавить неразрывный пробел и многоточие?), а вот как его применить?
Володя, Trebuchet MS мне на вид тоже понравился, но он к сожалению не моноширинный
Привет, народ! Я тут умудрился-таки, вооружившись макрорекордером и пошарив по примерам и справкам сети, состряпать макрос для Word, удаляющий многократные пробелы в тексте. Оказалось, что в окне "Найти и заменить" можно использовать шаблоны, очень похожие на шаблоны регулярных выражений ( ; в паттерне вместо запятой) Вот что получилось:[vba]
Код
Sub WDDeleteSpace() ' макрос Word для "Убрать многократные пробелы" With Selection.Find .Text = "[ ]{2;}" ' найти в Selection 2 и более пробелов .Replacement.Text = " " .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе End With Selection.Find.Execute Replace:=wdReplaceAll ' заменить во всех найденных End Sub
[/vba] Формат текста выделения не калечится даже в таблицах (с которыми Ворд вообще не дружит)! Осталось дополнить его убиранием лидирующих и финишных пробелов. А ещё бы, кто-нибудь подсказал паттерн для удаления пробелов перед знаками припинания... Список-то я составил: [.,:;\!\?\)] (к стати, а как в перечисление добавить неразрывный пробел и многоточие?), а вот как его применить?
Володя, Trebuchet MS мне на вид тоже понравился, но он к сожалению не моноширинный Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 16.12.2011, 11:59
паттерн для удаления пробелов перед знаками припинания
написать-то не сложно (с использованием позитивного просмотра вперед - см. лист, посвященный SubMatches), но беда в том, что этот механизм отсутствует в поиске Word... Лёш, ты бы все-таки сбросил ну маленький кусочек документа - того, что коверкается регулярными выражениями Что-то не так...
Кажется, все-таки можно обойтись без просмотра вперед... для этого надо в Worde составить шаблон поискас подвыражениями в круглых скобках: (здесь записать шаблон пробелов)(здесь записать шаблон знаков препинания) и применить такой шаблон замены: \2
Trebuchet MS я подсмотрел как раз на одной из страничек с примерами шаблонов. Моноширинность желательна, но не критически важна
Лёш, привет!
Цитата (Alex_ST)
добавить неразрывный пробел и многоточие?
[vba]
Код
.Text = "[.,:;\!\?\)" & Chr(133) & Chr(160) & "]"
[/vba]
Цитата (Alex_ST)
паттерн для удаления пробелов перед знаками припинания
написать-то не сложно (с использованием позитивного просмотра вперед - см. лист, посвященный SubMatches), но беда в том, что этот механизм отсутствует в поиске Word... Лёш, ты бы все-таки сбросил ну маленький кусочек документа - того, что коверкается регулярными выражениями Что-то не так...
Кажется, все-таки можно обойтись без просмотра вперед... для этого надо в Worde составить шаблон поискас подвыражениями в круглых скобках: (здесь записать шаблон пробелов)(здесь записать шаблон знаков препинания) и применить такой шаблон замены: \2
Trebuchet MS я подсмотрел как раз на одной из страничек с примерами шаблонов. Моноширинность желательна, но не критически важнаv__step
С уважением, Владимир
Сообщение отредактировал v__step - Пятница, 16.12.2011, 13:25
Володя, зачем тебе Вордовый документ-пример, в котором вчера не работал макрос, если я в 11:57 сегодня привёл текст работающего макроса? [vba]
Код
Sub WDDeleteSpace() ' макрос Word для "Убрать многократные пробелы" With Selection.Find .MatchWildcards = True ' разрешить подстановочные знаки при поиске .Text = "[ ]{2;}" ' найти в Selection 2 и более пробелов .Replacement.Text = " " ' заменять на пробел .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе .Execute Replace:=wdReplaceAll ' заменить во всех найденных End With End Sub
[/vba] А SubMatches а Ворде работают. Вот я ещё один полезный макрос наковырял/шлифанул: [vba]
Код
Sub WDDelSpacePunktMark() ' макрос Word для "Убрать пробелы перед знаками препинания" With Selection.Find .MatchWildcards = True ' разрешить подстановочные знаки при поиске .Text = "[ ]{1;}([.,:;\!\?\)" & Chr(133) & "])" ' найти в Selection 1 и более пробелов перед знаками препинания .Replacement.Text = "\1" ' заменять на соответствующий символ из SubMatches (порядковый номер символа в круглых скобках) .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе .Execute Replace:=wdReplaceAll ' заменить во всех найденных End With End Sub
[/vba] Но если уж очень хочешь, то лови пример.
Володя, зачем тебе Вордовый документ-пример, в котором вчера не работал макрос, если я в 11:57 сегодня привёл текст работающего макроса? [vba]
Код
Sub WDDeleteSpace() ' макрос Word для "Убрать многократные пробелы" With Selection.Find .MatchWildcards = True ' разрешить подстановочные знаки при поиске .Text = "[ ]{2;}" ' найти в Selection 2 и более пробелов .Replacement.Text = " " ' заменять на пробел .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе .Execute Replace:=wdReplaceAll ' заменить во всех найденных End With End Sub
[/vba] А SubMatches а Ворде работают. Вот я ещё один полезный макрос наковырял/шлифанул: [vba]
Код
Sub WDDelSpacePunktMark() ' макрос Word для "Убрать пробелы перед знаками препинания" With Selection.Find .MatchWildcards = True ' разрешить подстановочные знаки при поиске .Text = "[ ]{1;}([.,:;\!\?\)" & Chr(133) & "])" ' найти в Selection 1 и более пробелов перед знаками препинания .Replacement.Text = "\1" ' заменять на соответствующий символ из SubMatches (порядковый номер символа в круглых скобках) .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе .Execute Replace:=wdReplaceAll ' заменить во всех найденных End With End Sub
[/vba] Но если уж очень хочешь, то лови пример.Alex_ST
Вот ты и познакомился с подвыражениями (SubMatches)
Последний шаблон поиска, конечно, лучше моего, т.к. в нем одно подвыражение У меня их два - сложней, но для обучения интересней Они дали команду поисковику оставить после замены только первое подвыражение, а я второе - результат будет одинаковый
А неразрывный пробел Chr(160) обидели - забыли, забросили, бедный он, несчастный Вообще говоря, это не все - в Word много непечатных знаков.
Ты решил задачу очень хорошо, так и надо было сделать. К примеру интерес другого рода... и отдельное спасибо
Вот ты и познакомился с подвыражениями (SubMatches)
Последний шаблон поиска, конечно, лучше моего, т.к. в нем одно подвыражение У меня их два - сложней, но для обучения интересней Они дали команду поисковику оставить после замены только первое подвыражение, а я второе - результат будет одинаковый
А неразрывный пробел Chr(160) обидели - забыли, забросили, бедный он, несчастный Вообще говоря, это не все - в Word много непечатных знаков.
Ты решил задачу очень хорошо, так и надо было сделать. К примеру интерес другого рода... и отдельное спасибоv__step
С уважением, Владимир
Сообщение отредактировал v__step - Пятница, 16.12.2011, 16:09
nerv, ОГРОМНОЕ СПАСИБО! Отличная не только по содержанию, но и по качеству сканирования и обработки книга! Мало того, что PDF с OCR'ом, так ещё и со структурой закладок! ВЕЩЬ! (А как я с год назад "Уокенбаха", у которого не было структуры, намучился редактировать... Кошмар!). Серёга, это надо в библиотеку класть обязательно. Ведь не все могут с торрента качнуть (я сам качнул и выложил это на Минусе кому надо, качайте)
nerv, ОГРОМНОЕ СПАСИБО! Отличная не только по содержанию, но и по качеству сканирования и обработки книга! Мало того, что PDF с OCR'ом, так ещё и со структурой закладок! ВЕЩЬ! (А как я с год назад "Уокенбаха", у которого не было структуры, намучился редактировать... Кошмар!). Серёга, это надо в библиотеку класть обязательно. Ведь не все могут с торрента качнуть (я сам качнул и выложил это на Минусе кому надо, качайте)Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 16.12.2011, 22:20
Открыл MsWordMacros.doc, и все понял. Дурак я старый! Конечно, обычные регулярные выражения здесь ничего не дадут. Получается так, что им для демонстрации силы нужен весь текст (ну и жадные создания). Хорошо, отдам я им весь текст, вернут они результаты непосильных трудов в виде отредактированной строки, а мне-то что с ней делать? Ведь форматирование было начисто забыто! Как это все богатство вернуть назад в форматированный документ?!!
А Word-RegExp будут работать с живым, настоящим текстом, бережно сохраняя форматирование каждой буковки, значит они мощнее! Теперь получается так, что пока ты двигался в правильном направлении, я старательно тянул вбок...
Лёша, это было здорово! Ты открыл новую тему, и твой инструмент во многих случаях будет незаменим. Отдельное спасибо за урок!
Открыл MsWordMacros.doc, и все понял. Дурак я старый! Конечно, обычные регулярные выражения здесь ничего не дадут. Получается так, что им для демонстрации силы нужен весь текст (ну и жадные создания). Хорошо, отдам я им весь текст, вернут они результаты непосильных трудов в виде отредактированной строки, а мне-то что с ней делать? Ведь форматирование было начисто забыто! Как это все богатство вернуть назад в форматированный документ?!!
А Word-RegExp будут работать с живым, настоящим текстом, бережно сохраняя форматирование каждой буковки, значит они мощнее! Теперь получается так, что пока ты двигался в правильном направлении, я старательно тянул вбок...
Лёша, это было здорово! Ты открыл новую тему, и твой инструмент во многих случаях будет незаменим. Отдельное спасибо за урок!v__step
С уважением, Владимир
Сообщение отредактировал v__step - Пятница, 16.12.2011, 23:48
Володя, с добрым утром! Я рад что ты заценил-таки результаты моих потуг запрограммировать Ворд, но вообще-то по отношению ко всему форуму это явный оффтоп. А Серж нас не ругает за это, наверное, только потому, что последние посты всё-таки явно относятся к теме топика - RegExp, которые сами, честно говоря, представляя из себя средство обработки текстов, являются оффтопом в форуме про электронные таблицы Серж, а может немного расширить тематику форума, добавив ветку VBA-программирования других приложений? Тогда там уже можно будет завести абсолютно законные разделы по программированию Word, Visio, Access, Power Point, Corel Draw, … да и вообще любых приложений, знающих Бэйсик?
Володя, с добрым утром! Я рад что ты заценил-таки результаты моих потуг запрограммировать Ворд, но вообще-то по отношению ко всему форуму это явный оффтоп. А Серж нас не ругает за это, наверное, только потому, что последние посты всё-таки явно относятся к теме топика - RegExp, которые сами, честно говоря, представляя из себя средство обработки текстов, являются оффтопом в форуме про электронные таблицы Серж, а может немного расширить тематику форума, добавив ветку VBA-программирования других приложений? Тогда там уже можно будет завести абсолютно законные разделы по программированию Word, Visio, Access, Power Point, Corel Draw, … да и вообще любых приложений, знающих Бэйсик?Alex_ST
По-моему, чистых тем не бывает. Часто просто необходимо хоть немного отвлечься, чтобы выйти на прямой результат Яркий пример - последний Лёшин заход на Word-RegExp. Нет ничего забавнее моих настойчивых просьб посмотреть файл вживую. Я его открыл только для того, чтобы понять, что мог не открывать. Одного только эмоционального заряда хватило, чтобы прозреть слепцу и увидеть, какую золотую рыбку Лёша поймал.:)
По-моему, чистых тем не бывает. Часто просто необходимо хоть немного отвлечься, чтобы выйти на прямой результат Яркий пример - последний Лёшин заход на Word-RegExp. Нет ничего забавнее моих настойчивых просьб посмотреть файл вживую. Я его открыл только для того, чтобы понять, что мог не открывать. Одного только эмоционального заряда хватило, чтобы прозреть слепцу и увидеть, какую золотую рыбку Лёша поймал.:)v__step
С уважением, Владимир
Сообщение отредактировал v__step - Воскресенье, 18.12.2011, 09:52
Открыл MsWordMacros.doc, и все понял. … Конечно, обычные регулярные выражения здесь ничего не дадут.
Quote (v__step)
Я его открыл только для того, чтобы понять, что мог не открывать
Я не понял, Володя, твой аккаунт что ли ломанули и что-то одно из двух - не от тебя? Или с момента Пятница, Вчера, 23:31 до Суббота, Сегодня, 16:54 ты кардинально поменял своё мнение?
Quote (v__step)
а что если добавить еще 1 листик в нашу книгу
может, сначала доделаем то, что уже почти готово, а потом будем добавлять-расширять? Между прочим, Володя, я так до сих пор и не увидел давно обещанные тобой исправленные и доработанные листы с описаниями метасимволов и тестерами. Поэтому несколько затормозилась моя доработка листа с описанием объекта RegExp (там есть несколько моментов, которые я не могу описать понятно, т.к. сам не до конца понимаю и надеюсь понять на твоих примерах)
Quote (v__step)
Открыл MsWordMacros.doc, и все понял. … Конечно, обычные регулярные выражения здесь ничего не дадут.
Quote (v__step)
Я его открыл только для того, чтобы понять, что мог не открывать
Я не понял, Володя, твой аккаунт что ли ломанули и что-то одно из двух - не от тебя? Или с момента Пятница, Вчера, 23:31 до Суббота, Сегодня, 16:54 ты кардинально поменял своё мнение?
Quote (v__step)
а что если добавить еще 1 листик в нашу книгу
может, сначала доделаем то, что уже почти готово, а потом будем добавлять-расширять? Между прочим, Володя, я так до сих пор и не увидел давно обещанные тобой исправленные и доработанные листы с описаниями метасимволов и тестерами. Поэтому несколько затормозилась моя доработка листа с описанием объекта RegExp (там есть несколько моментов, которые я не могу описать понятно, т.к. сам не до конца понимаю и надеюсь понять на твоих примерах)Alex_ST
Я убрал из своего предыдущего поста (из головы тоже) все, что относится к нечеткому поиску, заменил слово "он" на "Лёша", чтобы было абсолютно однозначно, и выделил ключевую мысль. Сейчас вроде бы все понятно. Я не менял свое мнение, а только укрепил его Лёш, извини, если я тебя чем-то обидел Давай, спишем недостатки на общую затурканность Я вынужден работать после работы и по выходным.
Сегодня на мне проверочные расчеты мостов американских кранов, которые будут разбирать укрытие над четвертым блоком Чернобыльской станции. От начала работы до конца 14 дней. Без помощи Excel не обойтись. Пожелай мне удачи! Если выживу, продолжим в более спокойном режиме
Я убрал из своего предыдущего поста (из головы тоже) все, что относится к нечеткому поиску, заменил слово "он" на "Лёша", чтобы было абсолютно однозначно, и выделил ключевую мысль. Сейчас вроде бы все понятно. Я не менял свое мнение, а только укрепил его Лёш, извини, если я тебя чем-то обидел Давай, спишем недостатки на общую затурканность Я вынужден работать после работы и по выходным.
Сегодня на мне проверочные расчеты мостов американских кранов, которые будут разбирать укрытие над четвертым блоком Чернобыльской станции. От начала работы до конца 14 дней. Без помощи Excel не обойтись. Пожелай мне удачи! Если выживу, продолжим в более спокойном режимеv__step
С уважением, Владимир
Сообщение отредактировал v__step - Воскресенье, 18.12.2011, 10:22
Sub WDDeleteSpace() ' макрос Word для "Убрать многократные пробелы" With Selection.Find .MatchWildcards = True ' разрешить подстановочные знаки при поиске .Text = "[ ]{2;}" ' найти в Selection 2 и более пробелов .Replacement.Text = " " ' заменять на пробел .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе .Execute Replace:=wdReplaceAll ' заменить во всех найденных End With End Sub
Леш можно еще так: [vba]
Код
With Selection.Find .Text = "^w" .Replacement.Text = " " .Execute 2 End With
[/vba]
Цитата (Alex_ST)
Sub WDDeleteSpace() ' макрос Word для "Убрать многократные пробелы" With Selection.Find .MatchWildcards = True ' разрешить подстановочные знаки при поиске .Text = "[ ]{2;}" ' найти в Selection 2 и более пробелов .Replacement.Text = " " ' заменять на пробел .Wrap = wdFindStop ' выполнить только в Selection и не предлагать после этого искать во всём документе .Execute Replace:=wdReplaceAll ' заменить во всех найденных End With End Sub
Леш можно еще так: [vba]
Код
With Selection.Find .Text = "^w" .Replacement.Text = " " .Execute 2 End With