24

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

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

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

2 ответа2

30

слово

Используйте реализацию 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)
  • Заменить .

11

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

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

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

заменить,

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .