Найдите и выделите нелатинские символы кодовой страницы в документе Word - PullRequest
0 голосов
/ 27 ноября 2018

Я искал это в сети, но, к сожалению, не радость.Я могу найти много примеров поиска и замены, но не так много, чтобы найти и выделить с помощью regex.

Что я хочу сделать, так это найти нелатинские символы кодовой страницы в документе MS Word и выделить их.Я думал, что лучший подход будет использовать regex (открыт для предложений, если это не так).Ниже код выделяет весь документ:

Sub Highlight_Words()
    Dim oRE As New RegExp: oRE.Pattern = "[^a-zA-Z0-9:]"
    Dim oM As Match

    Application.ScreenUpdating = False
    Options.DefaultHighlightColorIndex = wdRed
    With ActiveDocument.Content.Find
      .ClearFormatting
      .Text = oRE.Pattern
      '.Text = "[^a-zA-Z0-9\s:]"
      '.Text = "[a-zA-Z\d\s:]"
      '.Text = "  "
      With .Replacement
        .Text = "^&"
        .ClearFormatting
        .Highlight = True
      End With
      .Forward = True
      .Wrap = wdFindContinue
      .Format = True
      .MatchWildcards = True
      .Execute Replace:=wdReplaceAll
    End With
    Application.ScreenUpdating = True

End Sub

Любая помощь будет принята с благодарностью, спасибо

PS Я работаю над Windows 7 (64 бит) и Word 2013

Update1:
Ниже приведен пример текста:

Это просто пример текста для проверки выделения не алфавитно-цифровых символов (т. Е. Символов, которые не являются символами английского языка)(т. е. А), а не числа).Есть исключения из этого правила, такие как апостроф («2») или двоеточие («:») или дефис («-»).Но я могу добавить эти исключения, как только у меня будет основной шаблон для поиска не алфавитно-цифровых символов

Так что из вышеприведенного примера текста следует выделить À (у меня был другойсимволы в тексте, но, к сожалению, они не отображаются на сайте)

1 Ответ

0 голосов
/ 27 ноября 2018

Вы не можете использовать RegEx внутри документа Word;RegEx может работать только со строкой, которую вы извлекаете из документа (присваиваете строковой переменной).Но местоположение в документе и любая информация о форматировании теряется.Любой поиск должен выполняться с использованием встроенных в Word функциональных подстановочных знаков, которые похожи на RegEx, но не совпадают и не являются «мощными».

По сути, в «стандартных» кодах ANSI требуется что-тоANSI 126, учитывая "латинскую" кодовую страницу.(Вы можете просмотреть символы и их коды с помощью диалогового окна «Вставить символ (вставка / символ, дополнительные символы)» в Word.

При проверке с использованием предоставленного образца текста эта строка поиска работает: [!^011-^0126]. не в диапазоне символов ANSI 11 (символ новой строки Word) - ANSI 126 (нижний регистр z). Дополнительные символы с более высокими кодами ANSI можно добавлять после 126 как буквенные символы.

Введите в коде вопрос:

Sub Highlight_Words()
    Dim Pattern As String

    Pattern = "[!^011-^0126]"   
    Application.ScreenUpdating = False
    Options.DefaultHighlightColorIndex = wdRed
    With ActiveDocument.Content.Find
      .ClearFormatting
      .Text = Pattern
      With .Replacement
        .Text = "^&"
        .ClearFormatting
        .Highlight = True
      End With
      .Forward = True
      .Wrap = wdFindContinue
      .Format = True
      .MatchWildcards = True
      .Execute Replace:=wdReplaceAll
    End With
    Application.ScreenUpdating = True

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...