Страницы: 1
RSS
Word. Регулярное выражение для знаков пунктуации и спец знаков., Тема перенесена из основной ветки форума
 
Приветствую господа.
Что-то я совсем затупил, подскажите как в vba написать регулярное выражение для всех знаков препинания и разного рода спецсимволов?
Нужно вообще-то для ворда. Для выделения всех нужных символов в документе.
можно просто pattern
Код
(\(|\.|,|\)|[0-9]|:|;|-|Chr(34)|ChrW(7575)|\?|—|!|\[|\]|{|}|\\)

что-то не работает.
Заранее благодарю.
 
Код
Pattern = "\W|[0-9]"

или
Код
Pattern = "[^А-Яа-яёЁA-Za-z]"
Изменено: LightZ - 07.04.2013 21:07:43
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
А где же ikki?..
 
Цитата
Юрий М пишет: А где же ikki?..
:D   :D   :D

Спасибо, LightZ, сейчас буду проверять
 
Цитата
Юрий М пишет: А где же ikki?..
Я вместо него )
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Я в том смысле, что ikki у нас штатный "регулировщик" ))
 
проблема в том что нужно создать именно перечисления знаков и тд.
Так как в документе присутствуют другие шрифты, а мы занимаемся раскрасками шрифта.
В ворде почему то не работает
Код
Sub FormatFont_znak(FontName As String, FontColor As WdColor)
    With ActiveDocument.Range.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "[^а-яА-Яa-zA-ZЁё]"
        .Font.Name = FontName
        .Replacement.Text = ""
        .Replacement.Font.Color = FontColor
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceAll
    End With
End Sub

Sub Format()
Call FormatFont_znak("Times New Roman", wdColorRed)
End Sub

А также необходимо сделать перечисления для диакритики
ā ī ū ṛ ṝ ḷ ṅ  ñ ṭ ḍ ṇ ś ṣ ḥ ṁ / ă ĂĀ á à /    ␄ / í Í ì Ì ĭ /    / ú ù Ú Ù /  ␃   /    /  ,  /   / ␐ и ␑ / ṃ / ⎷ / ‐‒

Не смог я найти человеческой документации для работы с регулярками в ворде.
Синтаксис вроде один и тот же, но в ворде как-то не так все.
Изменено: Kreol2013 - 07.04.2013 21:35:23
 
Про диакритику было совсем недавно.
 
Да я знаю, я имею ввиду формат написания.
chr(4567)|chr(4567)|...
 
А пробовали через библиотеку RegExp, а не через поиск?
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Цитата
LightZ пишет:
А пробовали через библиотеку RegExp, а не через поиск?
как художник - художнику) нет, ибо не знаю как его применить к документу и при этом указать нужный шрифт. Сутки у нас есть)
 
Цитата
Kreol2013 пишет:
В ворде почему то не работает
Так может на форум по WORD?
 
Как-то изначальный вопрос один, а потом оказывается совершенно другой...
Советую изучить: http://www.excelworld.ru/forum/2-1017-1#11371
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
я сразу увидел это:
Цитата
Kreol2013 пишет:
Нужно вообще-то для ворда.
поэтому и молчу.
не дружу с вордом.
он слишком особенный какой-то  :D
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Если честно, здесь лучше. (комплимент форуму)
Скрипт выше с форума worda.
 
Лесть не проходит  :)  - Ваш вопрос по Word.
 
Вопрос больше для общего развития!.
Посидев еще немного и подумав все получилось.
Экранировать знаки не надо было.
А диакритику не заключать в ""
Код
.Text = "[.|,|;|:|" & ChrW(7779) & "|" & Chr(34) & "]"

Спасибо за наводку.
Цитата
LightZ пишет:
Как-то изначальный вопрос один, а потом оказывается совершенно другой...
Если сразу написать все все все, никто читать даже не будет. проверено.
Надеюсь никого не обидел.
Всем спасибо.
 
Цитата
Если сразу написать все все все, никто читать даже не будет
Так Вы решили порционно, по одному вопросу... А по отдельным темам - мороки много?
 
а вертикальные палочки внутри квадратных скобок какую смысловую нагрузку несут?
Изменено: ikki - 07.04.2013 23:31:22
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
|=ИЛИ по другому перечисление не работает. пишет неверный шаблон.
 
Цитата
Юрий М пишет:
Я в том смысле, что ikki у нас штатный "регулировщик" ))
регулЯровщик :)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
регулярно выражается - это да :)
 
ikki, в путь знаков проведет,
И издевок здесь ждать не приходится.
Выражаясь, он кратко и в лоб
'Регулярные разруливает выражения.™
RegExpы создает Expertno  :D (после комментария Юрия))
Изменено: Kreol2013 - 08.04.2013 00:58:29
 
Родились варианты:
Ikki - регулятор
Ikki - RegЕxp'ерт
 
юмористы, блин  :D  ;)
ну интересная ведь штуковина, чо!
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
Kreol2013 пишет:
|=ИЛИ по другому перечисление не работает. пишет неверный шаблон.
гм... похоже на специфические заморочки именно ворда.
в "обычном" regexp этот символ играет специальную роль, но не внутри квадратных скобок.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
ikki пишет:
|=ИЛИ
хотя конечно могу и ошибаться.
Цитата
ikki пишет:
гм... похоже на специфические заморочки именно ворда.
да там все не как у людей.
А куча лишних настроек сбивает с толку.
Цитата
ikki пишет:
играет специальную роль, но не внутри квадратных скобок.
вроде ж тоже или только в круглых (П|п)ривет или я не прав?
 
можно без круглых
если нужен только выбор из нескольких вариантов
"папа|мама|колбаса" будет искать любое из этих трёх слов

кстати, у | есть свои тонкости
угадайте, что напечатает такой код?
Код
Sub t()
  Dim r As New RegExp
  r.Pattern = "ab|abcd|qwer"
  Debug.Print r.Execute("abcd").Item(0)
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Напечатает "ab", так как поиск останавливается на первом "попадосе".  :D
Таким образом, когда ищется дата, и если в ней год может быть представлен не только четырьмя цифрами, но и двумя, то сначала надо писать "большее" совпадение, а затем меньшее.  :)
Например, дата "21-05-2012" и "21-05-12".
Эта регулярка "\d{2}-\d{2}-(\d{2}|\d{4})" в первой дате вернёт "21-05-20", что не есть верно.
А вот эта регулярка "\d{2}-\d{2}-(\d{4}|\d{2})" в первой дате вернёт "21-05-2012" и во второй дате вернёт "21-05-12". То, что нам нужно!  :D
Изменено: Johny - 08.04.2013 09:11:28
There is no knowledge that is not power
Страницы: 1
Читают тему
Наверх