exponenta event banner

образец

Шаблоны для поиска и сопоставления текста

Описание

Шаблон определяет правила для сопоставления текста с функциями поиска текста, такими как contains, matches, и extract. Выражение шаблона можно построить с помощью функций шаблона, операторов и литерального текста. Например, имена версий MATLAB ®, начните с"R", за которым следует четырехзначный год, а затем либо "a" или "b". Определите шаблон, соответствующий формату имен версий:

pat = "R" + digitsPattern(4) + ("a"|"b");

Сопоставьте этот шаблон в строке:

str = ["String was introduced in R2016b." 
       "Pattern was added in R2020b."];
extract(str,pat)
ans =
  2x1 string array
    "R2016b"
    "R2020b"

Создание

Шаблоны состоят из буквенного текста и других шаблонов с использованием +, |, и ~ операторов. Можно также создать общие шаблоны с помощью объектных функций, которые используют правила, часто связанные с регулярными выражениями:

  • Образцы сопоставления символов - диапазоны букв или цифр, подстановочных знаков или пробелов, например lettersPattern.

  • Правила поиска - сколько раз должен происходить шаблон, чувствительность к регистру, необязательные шаблоны и именованные выражения, такие как optionalPattern.

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

  • Организация массива - определение структуры массива и указание способа отображения выражений массива, таких как maskedPattern и namedPattern.

Функция pattern также создает функции шаблона с синтаксисом, pat = pattern(txt), где txt - буквенный текст, который pat спички. Функции шаблона полезны для указания типа шаблона для проверки аргумента функции. Тем не менее, pattern функция редко требуется для других случаев, поскольку функции MATLAB, соответствующие тексту, принимают текстовые входные данные.

Функции объекта

развернуть все

containsОпределение наличия шаблона в строках
matchesОпределение соответствия массива строкам
countПодсчитать вхождения массива в строках
endsWithОпределите, заканчиваются ли строки шаблоном
startsWithОпределите, начинаются ли строки с шаблона
extractИзвлечение подстрок из строк
replaceПоиск и замена одной или нескольких подстрок
replaceBetweenЗаменить подстроки между начальной и конечной точками
splitРазбить строки в разделителях
eraseУдаление подстрок в строках
eraseBetweenУдаление подстрок между начальной и конечной точками
extractAfterИзвлечение подстрок после указанных положений
extractBeforeИзвлечение подстрок перед заданными позициями
extractBetweenИзвлечение подстрок между начальной и конечной точками
insertAfterВставка строк после указанных подстрок
insertBeforeВставка строк перед указанными подстроками
digitsPattern Совпадение цифр
lettersPatternСовпадение буквенных символов
alphanumericsPatternСовпадение букв и цифр
characterListPatternСопоставление символов из списка
whitespacePatternСовпадение символов пробела
wildcardPatternСоответствует нескольким символам любого типа
optionalPatternСделать шаблон необязательным для соответствия
possessivePatternШаблон соответствия без обратного отслеживания
caseSensitivePatternШаблон соответствия с учетом регистра
caseInsensitivePatternШаблон соответствия независимо от регистра
asFewOfPatternСовпадение шаблона как можно меньше раз
asManyOfPatternСовпадение шаблона как можно больше раз
alphanumericBoundaryСоответствие границ между алфавитно-цифровыми и неалфавитно-цифровыми символами
digitBoundaryСоответствие границы между символами цифр и символами без знаков
letterBoundaryСоответствие границы между буквенными и нелетными символами
whitespaceBoundaryСопоставление границы между символами пробела и символами, не являющимися пробелами
lineBoundaryСовпадение начала или конца строки
textBoundaryСовпадение начала или конца текста
lookAheadBoundaryСопоставить границу перед указанным образцом
lookBehindBoundaryСопоставить границу по заданному образцу
regexpPatternШаблон, соответствующий указанному регулярному выражению
maskedPatternОбразец с указанным отображаемым именем
namedPatternОбозначить именованный шаблон

Примеры

свернуть все

lettersPattern - типичный шаблон сопоставления символов, соответствующий буквенным символам. Создайте образец, соответствующий одному или нескольким буквенным символам.

txt = ["This" "is a" "1x6" "string" "array" "."];
pat = lettersPattern;

Использовать contains чтобы определить, соответствуют ли символы pat присутствуют в каждой строке. Логический массив вывода показывает, что первые пять строк в txt содержат буквы, а шестая строка - нет.

contains(txt,pat)
ans = 1x6 logical array

   1   1   1   1   1   0

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

startsWith(txt,pat)
ans = 1x6 logical array

   1   1   0   1   1   0

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

matches(txt,pat)
ans = 1x6 logical array

   1   0   0   1   1   0

Подсчитайте количество совпадений массива. Выходной числовой массив показывает, сколько раз lettersPattern соответствует в каждом элементе txt. Обратите внимание, что lettersPattern соответствует одной или нескольким буквам, поэтому группа параллельных букв является одной.

count(txt,pat)
ans = 1×6

     1     2     1     1     1     0

digitsPattern - типичный шаблон сопоставления символов, соответствующий цифровым символам. Создайте шаблон, соответствующий цифровым символам.

txt = ["1 fish" "2 fish" "[1,0,0] fish" "[0,0,1] fish"];
pat = digitsPattern;

Использовать replace для редактирования фрагментов текста, соответствующих образцу.

replace(txt,pat,"#")
ans = 1x4 string
    "# fish"    "# fish"    "[#,#,#] fish"    "[#,#,#] fish"

Создание нового фрагмента текста путем вставки "!" символ после совпадающих букв.

insertAfter(txt,pat,"!")
ans = 1x4 string
    "1! fish"    "2! fish"    "[1!,0!,0!] fish"    "[0!,0!,1!] fish"

Шаблоны могут быть созданы с помощью оператора OR, |, с текстом. Стирание текста, соответствующего указанному образцу.

txt = erase(txt,"," | "]" | "[")
txt = 1x4 string
    "1 fish"    "2 fish"    "100 fish"    "001 fish"

Извлечение pat из нового текста.

extract(txt,pat)
ans = 1x4 string
    "1"    "2"    "100"    "001"

Используйте шаблоны для подсчета вхождений отдельных символов в части текста.

txt = "She sells sea shells by the sea shore.";

Создать pat в качестве pattern объект, который соответствует отдельным буквам, используя alphanumericsPattern. Извлеките образец.

pat = alphanumericsPattern(1);
letters = extract(txt,pat);

Отображение гистограммы количества вхождений каждой буквы.

letters = lower(letters);
letters = categorical(letters);
histogram(letters)

Figure contains an axes. The axes contains an object of type categoricalhistogram.

Использовать maskedPattern отображение переменной вместо сложного выражения массива.

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

mathSymbols = asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)
mathSymbols = pattern
  Matching:

    asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

Создание шаблона, соответствующего арифметическим выражениям с пробелами между символами с помощью arithmeticPat.

longExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
longExpressionPat = pattern
  Matching:

    asManyOfPattern(asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1) + whitespacePattern) + asManyOfPattern(digitsPattern | characterListPattern("+-*/="),1)

Отображаемое выражение шаблона является длинным и трудно читаемым. Использовать maskedPattern для отображения имени переменной, mathSymbols, вместо выражения шаблона.

mathSymbols = maskedPattern(mathSymbols);
shortExpressionPat = asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols
shortExpressionPat = pattern
  Matching:

    asManyOfPattern(mathSymbols + whitespacePattern) + mathSymbols

  Show all details

Создайте строку, содержащую некоторые арифметические выражения, а затем извлеките образец из текста.

txt = "What is the answer to 1 + 1? Oh, I know! 1 + 1 = 2!";
arithmetic = extract(txt,shortExpressionPat)
arithmetic = 2x1 string
    "1 + 1"
    "1 + 1 = 2"

Создайте массив из двух именованных образцов. Именование шаблонов добавляет контекст к отображению массива.

Построить два шаблона: один, который совпадает со словами, которые начинаются и заканчиваются буквой D, и тот, который совпадает со словами, которые начинаются и заканчиваются буквой R.

dWordsPat = letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary;
rWordsPat = letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary;

Создайте шаблон, используя именованные шаблоны, который находит слово, начинающееся и оканчивающееся на D, за которым следует слово, начинающееся и оканчивающееся на R.

dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = pattern
  Matching:

    letterBoundary + caseInsensitivePattern("d" + lettersPattern + "d") + letterBoundary + whitespacePattern + letterBoundary + caseInsensitivePattern("r" + lettersPattern + "r") + letterBoundary

Этот образец трудно прочитать и не передает много информации о его предназначении. Использовать namedPattern чтобы обозначить массивы как именованные массивы, отображающие указанные имена и описания вместо выражений массива.

dWordsPat = namedPattern(dWordsPat,"dWords", "Words that start and end with D");
rWordsPat = namedPattern(rWordsPat,"rWords", "Words that start and end with R");
dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat = pattern
  Matching:

    dWords + whitespacePattern + rWords

  Using named patterns:

    dWords: Words that start and end with D
    rWords: Words that start and end with R

  Show more details

Создайте строку и извлеките текст, соответствующий образцу.

txt = "Dad, look at the divided river!";
words = extract(txt,dAndRWordsPat)
words = 
"divided river"

Создайте простой для чтения шаблон, соответствующий адресам электронной почты.

Адреса электронной почты следуют за структурой username @ domain.TLD, где имя пользователя и домен состоят из идентификаторов, разделенных точками. Создание шаблона, соответствующего идентификаторам, состоящим из любой комбинации буквенно-цифровых символов и"_" персонажи. Использовать maskedPattern чтобы назвать этот шаблон identifier.

identifier = asManyOfPattern(alphanumericsPattern(1) | "_", 1);
identifier = maskedPattern(identifier);

Создание шаблонов для сопоставления доменов и поддоменов, состоящих из идентификаторов. Создайте шаблон, соответствующий TLD из указанного списка.

subdomain = asManyOfPattern(identifier + ".") + identifier;
domainName = namedPattern(identifier,"domainName");
tld = "com" | "org" | "gov" | "net" | "edu";

Создайте шаблон для сопоставления локальной части сообщения электронной почты, который соответствует одному или нескольким идентификаторам, разделенным точками. Создайте шаблон для сопоставления домена, TLD и любых потенциальных поддоменов путем объединения ранее определенных шаблонов. Использовать namedPattern назначение каждого из этих шаблонов именованному шаблону.

username = asManyOfPattern(identifier + ".") + identifier;
domain = optionalPattern(namedPattern(subdomain) + ".") + ...
            domainName + "." + ...
            namedPattern(tld);

Объедините все массивы в одно выражение массива. Использовать namedPattern назначать username, domain, и emailPattern именованным узорам.

emailAddress = namedPattern(username) + "@" + namedPattern(domain);
emailPattern = namedPattern(emailAddress)
emailPattern = pattern
  Matching emailAddress:

    username + "@" + domain

  Using named patterns:

    emailAddress  : username + "@" + domain
      username    : asManyOfPattern(identifier + ".") + identifier
      domain      : optionalPattern(subdomain + ".") + domainName + "." + tld
        subdomain : asManyOfPattern(identifier + ".") + identifier
        domainName: identifier
        tld       : "com" | "org" | "gov" | "net" | "edu"

  Show all details

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

txt = "You can reach me by email at John.Smith@department.organization.org";
extract(txt,emailPattern)
ans = 
"John.Smith@department.organization.org"

Именованные шаблоны позволяют индексировать точки для доступа к именованным подшаблонам. Использование точечного индексирования для назначения определенного значения именованному шаблону domain.

emailPattern.emailAddress.domain = "mathworks.com"
emailPattern = pattern
  Matching emailAddress:

    username + "@" + domain

  Using named patterns:

    emailAddress: username + "@" + domain
      username  : asManyOfPattern(identifier + ".") + identifier
      domain    : "mathworks.com"

  Show all details

Представлен в R2020b