Как найти совпадения в Word

Обновлено: 02.07.2024

Регулярные выражения — это мощный язык для сопоставления текстовых шаблонов. На этой странице дается базовое введение в сами регулярные выражения, достаточное для наших упражнений по Python, и показано, как регулярные выражения работают в Python. Модуль Python "re" обеспечивает поддержку регулярных выражений.

В Python поиск по регулярному выражению обычно записывается так:

Метод re.search() принимает шаблон регулярного выражения и строку и ищет этот шаблон в строке. Если поиск успешен, search() возвращает объект соответствия или None в противном случае. Поэтому за поиском обычно сразу же следует оператор if для проверки успешности поиска, как показано в следующем примере, который ищет шаблон «слово:», за которым следует трехбуквенное слово (подробности ниже):

Код match = re.search(pat, str) сохраняет результат поиска в переменной с именем "match". Затем оператор if проверяет совпадение — если оно истинно, поиск успешен, и match.group() является совпадающим текстом (например, 'word:cat'). В противном случае, если совпадение ложно (точнее, нет), то поиск не увенчался успехом и соответствующего текста нет.

"r" в начале строки шаблона обозначает необработанную строку Python, которая проходит через обратную косую черту без изменений, что очень удобно для регулярных выражений (Java очень нуждается в этой функции!). Я рекомендую вам всегда писать шаблонные строки с буквой 'r' просто по привычке.

Основные шаблоны

Преимущество регулярных выражений заключается в том, что они могут задавать шаблоны, а не только фиксированные символы. Вот самые основные шаблоны, которые соответствуют одиночным символам:

  • a, X, 9, match = re.search(pat, str) выполнено успешно, match не равно None и, в частности, match.group() является совпадающим текстом

Повторение

Все становится еще интереснее, когда вы используете + и * для указания повторения в шаблоне

  • + -- 1 или более вхождений шаблона слева от него, например. 'i+' = один или несколько i
  • * -- 0 или более вхождений шаблона слева от него
  • <ли>? -- соответствует 0 или 1 вхождению шаблона слева от него

Самый левый и самый большой

Сначала поиск находит самое левое совпадение с шаблоном, а затем он пытается использовать как можно большую часть строки, т. е. + и * идут как можно дальше (+ и * называются "жадными"). ").

Примеры повторения

Пример электронного письма

В этом случае при поиске не будет получен весь адрес электронной почты, потому что \w не соответствует '-' или '.' в адрес. Мы исправим это, используя описанные ниже функции регулярных выражений.

Квадратные скобки

Квадратные скобки можно использовать для обозначения набора символов, поэтому [abc] соответствует 'a', 'b' или 'c'. Коды \w, \s и т. д. также работают внутри квадратных скобок, за одним исключением: точка (.) просто означает буквальную точку. Для проблемы с электронной почтой квадратные скобки — это простой способ добавить '.' и '-' для набора символов, которые могут появляться вокруг @ с шаблоном r'[\w.-]+@[\w.-]+', чтобы получить весь адрес электронной почты:

(Дополнительные функции квадратных скобок) Вы также можете использовать тире для обозначения диапазона, поэтому [a-z] соответствует всем строчным буквам. Чтобы использовать дефис без указания диапазона, поставьте дефис последним, например. [абв-]. Шляпа вверх (^) в начале набора квадратных скобок инвертирует его, поэтому [^ab] означает любой символ, кроме 'a' или 'b'.

Извлечение группы

Свойство регулярного выражения "группировать" позволяет выделить части совпадающего текста. Предположим, для проблемы с электронной почтой мы хотим извлечь имя пользователя и хост отдельно. Для этого добавьте скобки ( ) вокруг имени пользователя и хоста в шаблоне, например: r'([\w.-]+)@([\w.-]+)'. В этом случае круглые скобки не меняют того, чему будет соответствовать шаблон, вместо этого они устанавливают логические «группы» внутри текста совпадения. При успешном поиске match.group(1) — это текст совпадения, соответствующий первой левой скобке, а match.group(2) — текст, соответствующий второй левой скобке. Обычный match.group() по-прежнему содержит весь текст совпадения, как обычно.

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

найти

findall(), вероятно, самая мощная функция в модуле re. Выше мы использовали re.search(), чтобы найти первое совпадение с шаблоном. findall() находит *все* совпадения и возвращает их в виде списка строк, где каждая строка представляет одно совпадение.

найти все с файлами

Для файлов у вас может быть привычка писать цикл для перебора строк файла, а затем вы можете вызывать findall() для каждой строки. Вместо этого позвольте findall() сделать итерацию за вас — гораздо лучше! Просто передайте весь текст файла в findall() и позвольте ему вернуть список всех совпадений за один шаг (напомним, что f.read() возвращает весь текст файла в одной строке):

найти все и группы

Рабочий процесс RE и отладка

Шаблоны регулярных выражений содержат много смысла всего в нескольких символах , но они настолько плотны, что вы можете потратить много времени на отладку своих шаблонов. Настройте среду выполнения так, чтобы вы могли запускать шаблон и легко печатать то, что ему соответствует, например, запустив его на небольшом тестовом тексте и распечатав результат findall(). Если шаблон ничему не соответствует, попробуйте ослабить шаблон, удалив его части, чтобы получить слишком много совпадений. Когда он ничему не соответствует, вы не можете добиться никакого прогресса, поскольку нет ничего конкретного, на что можно было бы смотреть. Когда совпадений становится слишком много, вы можете постепенно ужесточать их, чтобы получить именно то, что вам нужно.

Параметры

Функции re принимают параметры для изменения поведения сопоставления с образцом. Флаг опции добавляется в качестве дополнительного аргумента к search() или findall() и т. д., например. re.search(pat, str, re.IGNORECASE).

  • IGNORECASE – игнорирует различия в верхнем и нижнем регистре при сопоставлении, поэтому "a" соответствует как "a", так и "A".
  • DOTALL -- позволяет точке (.) соответствовать новой строке -- обычно она соответствует чему угодно, кроме новой строки. Это может сбить вас с толку — вы думаете, что .* соответствует всему, но по умолчанию он не выходит за конец строки. Обратите внимание, что \s (пробел) включает символы новой строки, поэтому, если вы хотите сопоставить набор пробелов, который может включать новую строку, вы можете просто использовать \s*
  • MULTILINE -- В строке, состоящей из многих строк, разрешается использовать символы ^ и $ для соответствия началу и концу каждой строки. Обычно ^/$ соответствует только началу и концу всей строки.

Жадные и нежадные (необязательно)

Это необязательный раздел, в котором показана более сложная техника регулярных выражений, которая не требуется для упражнений.

Предположим, у вас есть текст с тегами: foo и так далее

Предположим, вы пытаетесь сопоставить каждый тег с шаблоном '()' — чему он соответствует в первую очередь?

Результат немного удивителен, но жадный аспект .* заставляет его сопоставлять все "foo и так далее" как одно большое совпадение. Проблема в том, что .* идет настолько далеко, насколько это возможно, вместо того, чтобы останавливаться на первом > (он же "жадный").

Есть расширение для регулярного выражения, где вы добавляете ? в конце, например .*? или .+?, изменив их на нежадные. Теперь они останавливаются, как только могут. Таким образом, шаблон '( )' будет просто '' как первое совпадение и '' как второе совпадение, и так далее, получая каждую пару по очереди. Стиль обычно таков, что вы используете .*?, а затем сразу же ищете какой-то конкретный маркер (> в данном случае), который заставляет конец .*? беги.

*? расширение возникло в Perl, а регулярные выражения, включающие расширения Perl, известны как Perl-совместимые регулярные выражения — pcre. Python включает поддержку pcre. Многие утилиты командной строки и т. д. имеют флаг, указывающий, что они принимают шаблоны pcre.

Старый, но широко используемый метод для кодирования этой идеи "все эти символы, кроме остановки на X" использует стиль квадратных скобок. Для приведенного выше вы можете написать шаблон, но вместо .*, чтобы получить все символы, используйте [^>]*, который пропускает все символы, которые не > (начальный ^ «инвертирует» набор квадратных скобок, поэтому он соответствует любой символ, не указанный в скобках).

Замена (необязательно)

Функция re.sub(pat, replace, str) ищет все экземпляры шаблона в заданной строке и заменяет их. Строка замены может включать '\1', '\2', которые относятся к тексту из группы (1), группы (2) и т. д. из исходного соответствующего текста.

Упражнение

Чтобы попрактиковаться в использовании регулярных выражений, см. упражнение "Имена для детей".

Если не указано иное, содержимое этой страницы предоставляется по лицензии Creative Commons Attribution 4.0, а образцы кода — по лицензии Apache 2.0. Подробнее см. в Правилах сайта Google Developers. Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.

Часто надстройкам необходимо действовать на основе текста документа. Функция поиска предоставляется каждым элементом управления содержимым (включая Body, Paragraph, Range, Table, TableRow и базовый объект ContentControl). Эта функция принимает строку (или выражение с подстановочными знаками), представляющую текст, который вы ищете, и объект SearchOptions. Он возвращает набор диапазонов, соответствующих искомому тексту.

Параметры поиска

Параметры поиска представляют собой набор логических значений, определяющих, как должен обрабатываться параметр поиска.

< /th> < td style="text-align: left;"> Получает или задает значение, указывающее, следует ли выполнять поиск с учетом регистра. Соответствует флажку «Учитывать регистр» в диалоговом окне «Найти и заменить».
Свойство Описание
ignorePunct Получает или задает значение, указывающее, следует ли игнорировать все знаки препинания между словами. Соответствует флажку «Игнорировать знаки препинания» в диалоговом окне «Найти и заменить».
ignoreSpace Получает или задает значение, указывающее, следует ли игнорировать все пробелы между словами. Соответствует флажку «Игнорировать символы пробела» в диалоговом окне «Найти и заменить».
matchCase
matchPrefix Получает или задает значение, указывающее, следует ли сопоставлять слова, начинающиеся со строки поиска. Соответствует флажку «Сопоставить префикс» в диалоговом окне «Найти и заменить».
matchSuffix Получает или задает значение, указывающее, следует ли сопоставлять слова, оканчивающиеся на строку поиска. Соответствует флажку «Сопоставить суффикс» в диалоговом окне «Найти и заменить».
matchWholeWord Получает или задает значение, указывающее, следует ли искать операцию только целых слов, а не текста, который является частью большего слова. Соответствует флажку «Найти только слова целиком» в диалоговом окне «Найти и заменить».
matchWildcards Получает или задает значение, указывающее, будет ли поиск выполняться с использованием специальных операторов поиска. Соответствует флажку «Использовать подстановочные знаки» в диалоговом окне «Найти и заменить».

Подстановочные знаки

В следующей таблице приведены рекомендации по подстановочным знакам поиска в Word JavaScript API.

< td style="text-align: left;">?< td style="text-align: left;">Любая строка символов< td style="text-align: left;">От n до m вхождений предыдущего символа или выражения < td style="text-align: left;">@

Экранирование специальных символов

Поиск по подстановочным знакам практически аналогичен поиску по регулярному выражению. В регулярных выражениях есть специальные символы, в том числе '[', ']', '(', ')', '', '*', '?', ' ', '!' и '@'. Если один из этих символов является частью буквальной строки, которую ищет код, то его необходимо экранировать, чтобы Word знал, что его следует рассматривать буквально, а не как часть логики регулярного выражения. Чтобы избежать символа в поиске пользовательского интерфейса Word, вы должны поставить перед ним символ '', но чтобы экранировать его программно, поместите его между символами '[]'. Например, '[*]*' ищет любую строку, начинающуюся с '*', за которой следует любое количество других символов.

Word позволяет использовать сопоставление с образцом при поиске информации в документе. Сопоставление шаблонов включается, если в диалоговом окне "Найти и заменить" установлен флажок "Использовать подстановочные знаки".

Одна из вещей, которую позволяет вам сделать сопоставление с образцом, — это указать, сколько предшествующих символов вы хотите найти.Вы делаете эту спецификацию, заключая число в фигурные скобки. Например, вы уже знаете, что если вы хотите найти какую-либо одну цифру, вы указываете это как 4. Если вы хотите найти любые три цифры, вы можете сделать это либо как 685 (что довольно неудобно), либо вы можете просто использовать 6.< /p>

Вы также можете указать диапазон совпадений. Если вы ищете любые трех-, четырех- или пятизначные последовательности, вы можете сделать это, выполнив поиск 7. Помните, однако, что значение или диапазон, указанный в фигурных скобках, применяется только к предыдущему искомому символу.

Если вы опустите последнее число в фигурных скобках, вы не установите верхний предел. Например, предположим, что вы хотите найти в документе любые точки, за которыми следуют два или более пробела. Вы можете сделать это, введя точку, за которой следует пробел, за которым следует . Точно так же вы можете искать последовательность из двух или более вкладок, используя спецификацию ^t.

Сопоставление с образцом в Word позволяет указать количество одним способом. Допустим, вы хотите найти любое количество точек с запятой в вашем документе. Вы можете сделать это, используя спецификацию ;, но вы также можете использовать спецификацию ;@. Знак at функционально аналогичен .

Интересно отметить, что вы можете использовать спецификатор количества с подстановочными знаками, но, вероятно, это не даст желаемых результатов. Например, если вы хотите найти буквы t и d, разделенные двумя символами, вы можете использовать спецификацию поиска t??d. Но если вы используете t?d в качестве своей спецификации (что, как вы думаете, будет таким же), Word вместо этого переведет его как t*d, что определенно не то, что вам нужно. Использование спецификации количества с подстановочным знаком звездочки не имеет никакого эффекта.

Биография автора

На его счету более 50 научно-популярных книг и множество журнальных статей. Аллен Уайатт является всемирно признанным автором. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнайте больше об Аллене.

Word позволяет находить/заменять текстовые шаблоны с помощью кодов в виде ^code . Эти коды уникальны для Word.

Чтобы проверить эти коды: Ctrl-H ⇒ вкладка «Заменить» ⇒ Поместите курсор в поле «Найти что» или «Заменить на» ⇒ Еще ⇒ Особые ⇒ выберите желаемый элемент для создания ^кода .

Эти коды можно использовать в полях "Найти" и "Заменить на":

  • ^p (параллельная метка или новая строка) (или ^13 ); ^l (Ручной разрыв строки) (или ^11 ); ^t (Tab)(или ^9 )
  • ^^ (Каретка — для устранения двусмысленности)
  • ^w (Пробел — пробел или табуляция)
  • ^nnn (десятичный символ ASCII), ^0nnn (символ ANSI)

Эти коды можно использовать в функции "Найти с помощью":

Вы можете использовать эти коды в поле "Заменить на":

  • ^& ("Найти что")
  • ^c (содержимое буфера обмена)
Найти/заменить регулярным выражением (Regex) или подстановочными знаками

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

Чтобы использовать регулярное выражение: Ctrl-H (Найти/Заменить) ⇒ Установите флажок «Использовать подстановочные знаки» в разделе «Дополнительно».

Синтаксис регулярного выражения см. в разделе "Регулярное выражение (Regex)". Word поддерживает регулярные выражения уникальным способом!

Регулярное выражение – это шаблон, соответствующий набору текстовых строк. Элементарный шаблон регулярного выражения соответствует одному символу следующим образом:

  • Любая буква, цифра и большинство специальных символов соответствуют друг другу. Например, совпадение ; 9 соответствует 9 ; % Спички % . Другими словами, сопоставление чувствительно к регистру, т. е. x соответствует x, но не X. Обратите внимание, что Word также поддерживает символы Юникода в поиске.
  • Эти специальные символы имеют особое значение: [ ] < >( ) - @ ? ! * \ . Чтобы сопоставить эти символы, добавьте перед ними escape-символ \ . Например, \ соответствует ; \@ соответствует @ .
  • ^nnn : соответствует символу ASCII с десятичным числом nnn . Например, ^13 соответствует новой строке; ^9 соответствует вкладке; ^65 соответствует A ; ^97 соответствует . Это не стандартное регулярное выражение.

Регулярное выражение для сопоставления текстовой строки (последовательности символов) состоит из последовательности подшаблонов (или подвыражений), например, xyz соответствует xyz ; 12345 соответствует 12345 ; \

Вы можете использовать эти подстановочные знаки при сопоставлении:

    <ли>? : соответствует любому одиночному символу, включая пробелы и знаки препинания. Например, ab?de соответствует abade , abbde , abXde и т. д. (Это не стандартное регулярное выражение, а уникальное для Word. В стандартном регулярном выражении используется точка ( . ), которая соответствует любому одиночному символу, кроме новой строки).
  • * : соответствует любой последовательности символов, включая пробел и специальные символы. Например, a*t соответствует art , aXXt , a@^@t , a t и т. д. (это не стандартное регулярное выражение, в котором используется .* )
  • [ ] : соответствует одному (одному) из заключенных символов (например, ИЛИ), например, [aeiou] соответствует a , e , i , o или u .
  • [-]: соответствует любому одиночному символу в этом диапазоне, например, [a-z] соответствует любой (одной) строчной букве; [a-z0-9] соответствует любой (одной) строчной букве или цифре.
  • [! ] : НЕ один из заключенных символов. Например, [!aeiou] соответствует любому (одиночному) символу, кроме a , e , i , o или u . (Это не стандартное регулярное выражение, в котором используется знак вставки (^).)
  • , , : индикаторы вхождений для n , m-to-n и n-или более вхождений. Например, abc соответствует abcabc; ab соответствует abab или ababab .
  • @ : индикаторы вхождений для одного или нескольких вхождений, такие же, как . Например, abc@de соответствует abcde , abcabdde , abcabcabcde и т. д. (Стандартное регулярное выражение использует + . Word не поддерживает * (ноль или более), ? (ноль или один), используемый в стандартном регулярном выражении. Word также не поддерживает и какие вероятно, это ошибка. ).
  • , > : позиционные привязки, соответствующие началу или концу границы слова. Например,

  1. Подшаблоны группировки: например, (abc) соответствует abcabc , а abc соответствует abcc .
  2. обратные ссылки: они не влияют на поиск, но делят результат совпадения на подсовпадения, обозначаемые как \1 , \2 , \3 и т. д., где \1 – это сопоставленное содержимое первого набора скобок. . Например, соответствует двум словам, разделенным пробелом, без обратных ссылок. Вы можете установить обратные ссылки, используя круглые скобки в этой форме ( ) ( ), чтобы «отметить» два совпадающих слова. Вы можете ссылаться на результирующее содержимое первого совпадающего слова как \1 , а второго слова как \2 . См. еще один пример ниже.
  1. Цель: поменять местами два слова.
    Регулярное выражение «Найти что»: ( ) ( )
    Значение «Найти что»: два полных слова, разделенные пробелом, отмеченные двумя обратными ссылками в скобках \1 и \ 2 .
    Регулярное выражение «Заменить на»: \2 \1
    «Заменить на» означает: \1 , \2 обозначают первую и вторую совпадающие обратные ссылки.
    Выберите "Заменить" (следующие 2 слова) или "Заменить все" (все два слова подряд).
  2. Регулярное выражение «Найти что»: ([! ]@)^13
    Значение «Найти что»: один или несколько пробелов перед знаком абзаца — соответствует последнему слову или части слова в конце абзац, отмеченный обратной ссылкой в ​​скобках \1 . Это немного отличается от ( )^13 , который соответствует полному слову в конце абзаца.
  3. Цель: преобразование даты из формы "28 марта 2018 г." в форму "28 марта 2018 г."
    Регулярное выражение "Найти что": (1)([dhnrst]) ( ) ([ 0-9])
    Регулярное выражение «Заменить на»: \3 \1, \4
  4. Цель: преобразование даты из формы "28/03/2018" в "2018/03/28"
    Регулярное выражение "Найти что": (3)/(2) /(2)
    "Заменить на": \3/\1/\2
  5. Цель: удалить пустые строки.
    Регулярное выражение «Найти что»: (^13)\1@
    Значение «Найти что»: два или более последовательных знака абзаца. Обратите внимание, что вы можете использовать обратные ссылки в «Найти с помощью».
    Регулярное выражение «Заменить на»: ^p
    «Заменить на» значение: Словом, вы можете использовать ^p в «Заменить на», но НЕ в «Найти что». Вам нужно использовать ^13 в «Найти что».
Найти изображения, таблицы, комментарии и другие объекты

Нажмите Ctrl-F, чтобы отобразить панель «Навигация» ⇒ Нажмите стрелку вниз в «Поиске документа» ⇒ Вы можете выбрать «Графика», «Таблицы», «Уравнения», «Сноски/Концевые сноски» или «Комментарии». .

Перейти к определенной странице, таблице, заголовку или другому элементу

Ctrl-G (Перейти) ⇒ В разделе «Перейти к чему» выберите тип элементов, таких как «Графика», «Таблицы», «Заголовки», «Поля», «Уравнения», «Объекты» и т. д. .

Найти/заменить определенное форматирование

Ctrl-H (Найти/Заменить) ⇒ Вкладка «Найти или заменить» ⇒ «Дополнительно» ⇒ «Формат» ⇒ Вы можете выбрать различные форматы, такие как «Шрифт», «Абзац», «Стиль» и т. д. ⇒ Введите текст (необязательно).

Стиль, шаблон и форматирование

Инструменты форматирования
  • Format Painter: одна из самых полезных функций для форматирования документов Word. Предположим, вы хотите применить тот же формат абзаца или символа к другой части документа. Выберите тексты, нажмите «Формат по образцу» (в крайнем левом меню «Главное») и вставьте тексты, которые необходимо отформатировать. Это похоже на копирование/вставку, но вместо текста копируется формат. Значок "Формат по образцу" тоже выглядит как копия и обычно сгруппирован со значками вырезания/копирования/вставки.
  • Показать метку абзаца: для выполнения расширенного форматирования и макета важно включить параметр «Показать метку абзаца» (в разделе «Главная» ⇒ «Абзац»), чтобы отображались метки абзаца и другие скрытые символы форматирования, такие как табуляция, пробел, перенос строки вручную. , разрыв раздела и разрыв страницы.

Таблица и преобразование в Excel

Формула таблицы: Вы можете использовать формулу, такую ​​как сумма, для таблицы WinWord, как и в Excel. В разделе «Инструменты для таблиц» ⇒ Макет ⇒ Данные ⇒ Формула. Столбцы называются a, b, c, . слева направо. Строки называются 1, 2, 3, . сверху донизу. Адрес верхней левой ячейки таблицы — a1. Например, sum(a1,a5) возвращает сумму ячеек a1 и a5; sum(a1:b3) возвращает сумму ячеек a1, a2, a3, b1, b2 и b3.

Макрос слов

Разное

Выбор столбцов текста: удерживайте клавишу «alt», вы можете использовать мышь для выбора столбцов текста.

Читайте также:

Чтобы найти: Подстановочный знак Образец
Любой одиночный символ s?t находит sat и set.
* s*d считает грустным и запущенным.
Начало слова (in)> находит внутри и внутри, но не интересно.
Один из указанных символов [ ] w[io]n находит выигрыш и выигрывает.
Любой одиночный символ в этом диапазоне [-] [rt]ight находит правое и прицельное . Диапазоны должны быть в порядке возрастания.
Любой одиночный символ, кроме символов в диапазоне, заключенном в скобки [!xz] t[!am]ck находит так и складки, но не складки или галочки.
Ровно n вхождений предыдущего символа или выражения fed находит фид, но не кормит.
Не менее n вхождений предыдущего символа или выражение feed находит Feed и Feed.
10 находит 10, 100 и 1000.
Одно или несколько вхождений предыдущего символа или выражения lo@t находит много и добычу.