Есть ли способ поиска шаблона в документе MS Word?

30

Есть ли способ поиска шаблонов внутри документа MS Word вместо точного соответствия?

У меня есть документ, в котором все десятичные дроби были записаны как /вместо .. Например, 1.02было написано как 1/02, потому что персидская типография использует /вместо .десятичной точки.

Так /как он используется не только для десятичных дробей, но и для других приложений, например, для дробей, процентов и т. Д., Есть ли способ найти шаблон, как N/Mв текстовом документе, где Nобозначает десятичную дробь, а Mтакже показывает другое десятичное число?

codezombie
источник
2
Как это не дублировать более 5 лет после запуска Super User?
Питер Мортенсен
1
Отправной точкой может быть регулярное выражение для поиска и замены в Microsoft Word .
Питер Мортенсен
Ну, было бы трудно переместить его в блокнот, если бы в середине был другой текст, давайте предположим, что кто-то пишет статью в журнале (используйте вместо этого латекс), чтобы они не могли вывести его из слова, или что-то в этом роде, они потерял бы все остальное форматирование.
Charm_quark
1
Я только что проверил: последние версии MS Word хранят документы Word (* .docx) в виде документов на основе XML. Как только вы узнаете, как работает эта структура, вы можете разархивировать файл * .docx и выполнить сопоставление с шаблоном в полученных структурах файлов XML.
Доминик
@ Доминик, это интересно. Не знал этого
codezombie

Ответы:

12

как 'N / M' в текстовом документе, где N обозначает десятичное число, а M также показывает другое десятичное число

Просто для поиска вы можете использовать в ^#/^#качестве параметра поиска. Под дополнительными опциями и найдите Special , есть некоторые другие опции, которые могут быть полезны.

Nb:, ^#это один десятичный знак, так что если вы ищете специально x / yy, то это будет ^#/^#^#и т.д.

заменить,

Это лучший вариант: выполнять поиск с использованием ([0-9])/([0-9])и заменять его \1.\2, а также включить «использовать подстановочные знаки».

Charm_quark
источник
Спасибо. это находит хиты. но Word не принимает ^ #. ^ # для замены. Я хочу оставить цифры вокруг «/» нетронутыми и заменить «/» на «.».
Codezombie
1
попробуйте выполнить поиск с этим "([0-9]) / ([0-9])" и замените на "\ 1. \ 2", выньте двойную кавычку. и включите «использовать подстановочные знаки»
Charm_quark
37

слово

Используйте реализацию Microsoft регулярных выражений

Нажмите CTRL+ H»нажмите Подробнее » Включить использование подстановочных знаков

  • Найти то, что: ([0-9]{1,2})/([0-9]{2})
  • Заменить: \1.\2

введите описание изображения здесь введите описание изображения здесь

Это похоже на сумасшедший шаблон поиска, поэтому давайте рассмотрим его:

  • [0-9] обозначает одно числовое значение (0,1,2,3,4,5,6,7,8 и 9)
  • {1,2}используется для подсчета вхождений предыдущего символа или выражения. В нашем случае это означает: Искать только одну или две цифры .

    Внимание: если вы используете немецкое слово, вы должны использовать в ;качестве разделителя вместо,

  • /не имеет особого значения. Он буквально ищет косую черту
  • ()круглые скобки важны. Они делят картину на логические последовательности , так что мы можем использовать позже \1, \2... \nв нашей замене шаблоне. Таким образом, мы сохраняем ценности

Подробнее читайте в разделе «Выражения по частям» в статье поддержки Microsoft или на сайте Word Грэма Майора.


VBA (лучшее решение)

Я предлагаю вам использовать метод VBA, который больше соответствует стандартным настройкам других движков RegEx. Они лучше задокументированы, и больше людей могут помочь вам.

Этот макрос запрашивает шаблон RegEx для поиска во всем документе и замены его на заданную вами строку.

Нажмите ALT+, F11чтобы открыть редактор VBA. Вставьте код в любое место и выполните егоF5

Sub RegexReplace()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")    
    On Error Resume Next

    RegEx.Global = True
    RegEx.Pattern = InputBox("Find what:")
    ActiveDocument.Range = _ 
        RegEx.Replace(ActiveDocument.Range, InputBox("Replace with:"))        

End Sub
  • Найти то, что: (?!\d)/(?=\d)
  • Заменить: .

введите описание изображения здесьвведите описание изображения здесь

nixda
источник