Володя, спасибо за ответ. Но это ещё не всё. Я 1/2 часа назад начал править свой предыдущий пост (добавлять ещё вопрос), а меня отвлекли по работе... Только сейчас доправил и отправил. А потом уже увидел твой ответ. Посмотри, пожалуйста.
К стати, на листе "Метасимволы+" неплохо было бы сделать доп.столбец с примерами паттернов
А по поводу цветов - твой лист, ты его и крась как хочешь. Но дополнительными цветами, пожалуйста, а то у меня палитра сбивается от твоих файлов и вся "цветовая дифференциация штанов" в других книгах плывёт из-за этого.
Володя, спасибо за ответ. Но это ещё не всё. Я 1/2 часа назад начал править свой предыдущий пост (добавлять ещё вопрос), а меня отвлекли по работе... Только сейчас доправил и отправил. А потом уже увидел твой ответ. Посмотри, пожалуйста.
К стати, на листе "Метасимволы+" неплохо было бы сделать доп.столбец с примерами паттернов
А по поводу цветов - твой лист, ты его и крась как хочешь. Но дополнительными цветами, пожалуйста, а то у меня палитра сбивается от твоих файлов и вся "цветовая дифференциация штанов" в других книгах плывёт из-за этого.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 14.12.2011, 14:36
Отдельной операцией надо убрать повторения пробелов. Шаблон поиска [ ]{2,} в шаблоне замены записать пробел (не [ ]). Затем надо удалить все остальное. Шаблон поиска [^A-Za-zА-Яа-я0-9 ]. Шаблон замены пустой. Проверь в тестере на листе замены! Удачи!
Отдельной операцией надо убрать повторения пробелов. Шаблон поиска [ ]{2,} в шаблоне замены записать пробел (не [ ]). Затем надо удалить все остальное. Шаблон поиска [^A-Za-zА-Яа-я0-9 ]. Шаблон замены пустой. Проверь в тестере на листе замены! Удачи!v__step
С уважением, Владимир
Сообщение отредактировал v__step - Среда, 14.12.2011, 16:41
ну, до Pattern="[^a-zA-Zа-яАЯ0-9]" я уже и сам додумался, а вот насчёт замены Application.Trim одной заменой что-то никак: Pattern="\s+" или Pattern=" +" я допёр : заменяются подряд идущие пробелы на 1 пробел а вот как убрать лидирующий и финиширующий пробелы В ТОМ ЖЕ ПАТТЕРНЕ? Или проще сделать простой Trim (не Application.Trim)
ну, до Pattern="[^a-zA-Zа-яАЯ0-9]" я уже и сам додумался, а вот насчёт замены Application.Trim одной заменой что-то никак: Pattern="\s+" или Pattern=" +" я допёр : заменяются подряд идущие пробелы на 1 пробел а вот как убрать лидирующий и финиширующий пробелы В ТОМ ЖЕ ПАТТЕРНЕ? Или проще сделать простой Trim (не Application.Trim)Alex_ST
И ещё нашел: в твоём описании метасимволов написано : \0n - восьмеричный код символа А ты уверен, что там должна быть ЦИФРА 0, а не буква o (латинская)?
И ещё нашел: в твоём описании метасимволов написано : \0n - восьмеричный код символа А ты уверен, что там должна быть ЦИФРА 0, а не буква o (латинская)?Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 14.12.2011, 16:09
А ты уверен, что там должна быть ЦИФРА 0, а не буква o (латинская)?
Наверное буква, спасибо! наверное, обозначает она okt (8), так же, как x - последняя буква hex, а u - от unicode
Quote (Alex_ST)
"\s+"
- ни в коем случае не применяй этот шаблон - он сбоит!! (у меня в метасимволах+ есть предупреждение пробел удобно брать в квадратные скобки, чтобы он был виден (только не в шаблоне замены) "[ ]{2,}" - чистый шаблон - точно не подведет. Хорош тем, что будет гораздо меньше замен, т.к. одиночные пробелы будут проигнорированы "[ ]+" - тоже сработает, но паразитных замен будет в сотни раз больше, чем необходимых
Лёша, поздравляю - у тебя пошло . Еще немного, и уже я запишусь к тебе в ученики Теперь, когда ты вовсю создаешь шаблоны, скажи, зачем ребята использовали в наборе "[...]" запятые (ветка нечеткого поиска)? Видать, не попробовали ...
Quote (Alex_ST)
А ты уверен, что там должна быть ЦИФРА 0, а не буква o (латинская)?
Наверное буква, спасибо! наверное, обозначает она okt (8), так же, как x - последняя буква hex, а u - от unicode
Quote (Alex_ST)
"\s+"
- ни в коем случае не применяй этот шаблон - он сбоит!! (у меня в метасимволах+ есть предупреждение пробел удобно брать в квадратные скобки, чтобы он был виден (только не в шаблоне замены) "[ ]{2,}" - чистый шаблон - точно не подведет. Хорош тем, что будет гораздо меньше замен, т.к. одиночные пробелы будут проигнорированы "[ ]+" - тоже сработает, но паразитных замен будет в сотни раз больше, чем необходимых
Лёша, поздравляю - у тебя пошло . Еще немного, и уже я запишусь к тебе в ученики Теперь, когда ты вовсю создаешь шаблоны, скажи, зачем ребята использовали в наборе "[...]" запятые (ветка нечеткого поиска)? Видать, не попробовали ...v__step
С уважением, Владимир
Сообщение отредактировал v__step - Среда, 14.12.2011, 16:53
пробел удобно брать в квадратные скобки, чтобы он был виден
вот за эту мысль СПАСИБО
Цитата (v__step)
"[ ]{2,}" - чистый шаблон
до выражений с фигурными скобками я просто ещё не доковырялся А сейчас посмотрел и понял, что так, действительно лучше.
Цитата (v__step)
зачем ребята писали в наборе "[...]" запятые (ветка нечеткого поиска)?
ну, ты прямо телепат: с пол-пинка догадался, куда я сначала полез смотреть, когда встала задача разбить текст на слова. А функция у меня получилась такая (прости, учитель, за позднее связывание, но там, для кого я это делаю, так будет лучше):[vba]
Код
Function dePunkt$(sStr$) With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True: .MultiLine = True .Pattern = "[^a-zA-Zа-яА-Я0-9]" dePunkt = .Replace(sStr, " ") .Pattern = "[ ]{2,}" dePunkt = Trim(.Replace(dePunkt, " ")) End With End Function
[/vba]
Цитата (v__step)
наверное, обозначает она okt
вот и я о том же подумал
Цитата (v__step)
пробел удобно брать в квадратные скобки, чтобы он был виден
вот за эту мысль СПАСИБО
Цитата (v__step)
"[ ]{2,}" - чистый шаблон
до выражений с фигурными скобками я просто ещё не доковырялся А сейчас посмотрел и понял, что так, действительно лучше.
Цитата (v__step)
зачем ребята писали в наборе "[...]" запятые (ветка нечеткого поиска)?
ну, ты прямо телепат: с пол-пинка догадался, куда я сначала полез смотреть, когда встала задача разбить текст на слова. А функция у меня получилась такая (прости, учитель, за позднее связывание, но там, для кого я это делаю, так будет лучше):[vba]
Код
Function dePunkt$(sStr$) With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True: .MultiLine = True .Pattern = "[^a-zA-Zа-яА-Я0-9]" dePunkt = .Replace(sStr, " ") .Pattern = "[ ]{2,}" dePunkt = Trim(.Replace(dePunkt, " ")) End With End Function
Лёш, самое время для лирического отступления Регулярные выражения далеко не всегда работают быстро Такие монстры как Trim а, особенно, Split и Like могут выиграть, поэтому в конкретном случае судья - только прямое тестирование
Нормально! Только добавь дефис:
Quote (Alex_ST)
"[^a-zA-Zа-яАЯ0-9]"
И Trim по делу
Лёш, самое время для лирического отступления Регулярные выражения далеко не всегда работают быстро Такие монстры как Trim а, особенно, Split и Like могут выиграть, поэтому в конкретном случае судья - только прямое тестированиеv__step
С уважением, Владимир
Сообщение отредактировал v__step - Среда, 14.12.2011, 18:43
спасибо за поправку. ОписАлся, конечно Хорошо ещё что вчера не успел ребятам отдать чтобы в код базы данных внедрить. А то было бы не удобно Я поправил в коде в своём вчерашнем посте чтобы не путаться потом.
Привет, Володя.
Quote (v__step)
Только добавь дефис
спасибо за поправку. ОписАлся, конечно Хорошо ещё что вчера не успел ребятам отдать чтобы в код базы данных внедрить. А то было бы не удобно Я поправил в коде в своём вчерашнем посте чтобы не путаться потом.Alex_ST
Ещё вопрос: тебе не кажется, что забракованные тобой метасимволы \s \S не всегда верно обрабатываются только потому, что в текстах (особенно скопированных из и-нета) часто вместо обычных пробелов Chr(32) попадаются неразрывные Chr(160)?
Ещё вопрос: тебе не кажется, что забракованные тобой метасимволы \s \S не всегда верно обрабатываются только потому, что в текстах (особенно скопированных из и-нета) часто вместо обычных пробелов Chr(32) попадаются неразрывные Chr(160)?Alex_ST
Лёш, добрый день! Если по-честному, я табуляторы и переводы строк еще не тестировал. Надо, конечно, попробовать Что касается \s, я попробовал тестером, и отрицательные результаты своего эксперимента сохранил на листе "Matches". В случае одиночных пробелов у меня ничего не получилось для строк, набранных на клавиатуре в русской и английской раскладке
Если у тебя есть какие-то предположения, ты можешь сразу проверять их тестером Интересно, что табулятор в ячейку Excel вставить не получается...
Лёш, добрый день! Если по-честному, я табуляторы и переводы строк еще не тестировал. Надо, конечно, попробовать Что касается \s, я попробовал тестером, и отрицательные результаты своего эксперимента сохранил на листе "Matches". В случае одиночных пробелов у меня ничего не получилось для строк, набранных на клавиатуре в русской и английской раскладке
Если у тебя есть какие-то предположения, ты можешь сразу проверять их тестером Интересно, что табулятор в ячейку Excel вставить не получается...v__step
С уважением, Владимир
Сообщение отредактировал v__step - Четверг, 15.12.2011, 12:22
Володя, я не только проверил тестером, но ещё и внимательно посмотрел на ячейки с паттернами листа "Вхождения"... У тебя в ячейки листа закрались апострофы перед обратным слэшем в \S \s и ещё - пробелы после S и s Я их, конечно, убрал и всё заработало как надо! А вот \w \W, действительно, работают только с латиницей (У тебя там тоже, между прочим, пробелы затесались. Убери и всё заработает) И, к стати, в моём описании метасимволов на первом листе так и написано: \w - латинская буква, цифра или подчеркивание. Эквивалентно [A-Za-z0-9_]. \W - любой символ, кроме латинской буквы, цифры или подчеркивания. Эквивалентно [^A-Za-z0-9_]
Володя, я не только проверил тестером, но ещё и внимательно посмотрел на ячейки с паттернами листа "Вхождения"... У тебя в ячейки листа закрались апострофы перед обратным слэшем в \S \s и ещё - пробелы после S и s Я их, конечно, убрал и всё заработало как надо! А вот \w \W, действительно, работают только с латиницей (У тебя там тоже, между прочим, пробелы затесались. Убери и всё заработает) И, к стати, в моём описании метасимволов на первом листе так и написано: \w - латинская буква, цифра или подчеркивание. Эквивалентно [A-Za-z0-9_]. \W - любой символ, кроме латинской буквы, цифры или подчеркивания. Эквивалентно [^A-Za-z0-9_]Alex_ST
OFFTOP: Володя, а Word ты программировать не пытался? Я там слепил как-то пару простейших макросов типа "поставить закладку", "перейти к закладке", "вставить неформатированный текст", "поставить ударение в слове" и всё... Совсем не изученная мною объектная модель...
Мня жутко достали любители выравнивать текст, делать отступы абзацев и переносы строк пробелами! Попытался использовать полученный у тебя опыт для написания макроса - аналога Application.Trim Excel'я [vba]
Код
Sub WordTextTrim() Dim sText$: sText = Selection.Text With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True: .MultiLine = True .Pattern = "[ ]{2,}" ' 2 и более пробелов подряд sText = Trim(.Replace(sText, " ")) End With Selection.Text = sText End Sub
[/vba] Пробелы-то убирает, но при этом формат текста калечит
OFFTOP: Володя, а Word ты программировать не пытался? Я там слепил как-то пару простейших макросов типа "поставить закладку", "перейти к закладке", "вставить неформатированный текст", "поставить ударение в слове" и всё... Совсем не изученная мною объектная модель...
Мня жутко достали любители выравнивать текст, делать отступы абзацев и переносы строк пробелами! Попытался использовать полученный у тебя опыт для написания макроса - аналога Application.Trim Excel'я [vba]
Код
Sub WordTextTrim() Dim sText$: sText = Selection.Text With CreateObject("VBScript.RegExp"): .Global = True: .IgnoreCase = True: .MultiLine = True .Pattern = "[ ]{2,}" ' 2 и более пробелов подряд sText = Trim(.Replace(sText, " ")) End With Selection.Text = sText End Sub
[/vba] Пробелы-то убирает, но при этом формат текста калечит Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Четверг, 15.12.2011, 13:23
Было дело. Для одной организации сделал программу, которая устанавливает связи ячеек рабочей книги с группой документов *.doc. В рабочей книге программно для нужных ячеек создаются имена, а в Word - соответствующие закладки. Затем все при необходимости обновляется Есть и небольшая утилита для форматирования в Word.
Возможно, проблема в том, что в описание стиля абзаца входит название стиля следующего абзаца. Тогда при "ломке" часть абзацев может захватывать соседние фрагменты текста. По крайней мере, твой эффект должен присутствовать и при ручном удалении текста. Это, конечно, непросто - надо подумать... Ты пришли небольшие фрагменты документов - до и после работы программы (с прилегающими с обеих сторон абзацами)
Было дело. Для одной организации сделал программу, которая устанавливает связи ячеек рабочей книги с группой документов *.doc. В рабочей книге программно для нужных ячеек создаются имена, а в Word - соответствующие закладки. Затем все при необходимости обновляется Есть и небольшая утилита для форматирования в Word.
Возможно, проблема в том, что в описание стиля абзаца входит название стиля следующего абзаца. Тогда при "ломке" часть абзацев может захватывать соседние фрагменты текста. По крайней мере, твой эффект должен присутствовать и при ручном удалении текста. Это, конечно, непросто - надо подумать... Ты пришли небольшие фрагменты документов - до и после работы программы (с прилегающими с обеих сторон абзацами)v__step
С уважением, Владимир
Сообщение отредактировал v__step - Четверг, 15.12.2011, 13:42
nerv, спасибо за ссылки. Будем посмотреть А пока я выкладываю крайнюю версию 1-го листа в таком виде как сейчас есть. Надо бы немного примеров интересных паттернов добавить. И я ещё не смотрел примеры, которые написаны болдовым синим шрифтом (те, что обычным - уже разобрал и сократил) Не все паттерны я ещё разобрал - те, которые с круглыми скобками пока даже не крутил. Они, похоже, для SubMatches а я в них пока никак Володя обещал разъяснение-описание сделать короткое и ясное... Но ему, похоже, не до того - примеры полирует. Да и мне поработать по работе не мешало бы
nerv, спасибо за ссылки. Будем посмотреть А пока я выкладываю крайнюю версию 1-го листа в таком виде как сейчас есть. Надо бы немного примеров интересных паттернов добавить. И я ещё не смотрел примеры, которые написаны болдовым синим шрифтом (те, что обычным - уже разобрал и сократил) Не все паттерны я ещё разобрал - те, которые с круглыми скобками пока даже не крутил. Они, похоже, для SubMatches а я в них пока никак Володя обещал разъяснение-описание сделать короткое и ясное... Но ему, похоже, не до того - примеры полирует. Да и мне поработать по работе не мешало бы Alex_ST