pattern

Шаблоны, чтобы искать и совпадать с текстом

Описание

Шаблон задает правила для совпавшего текста с ищущими текст функциями как 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"

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

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, где имя пользователя и область составлены из идентификаторов, разделенных периодами. Создайте шаблон, который совпадает с идентификаторами, состоявшими из любой комбинации алфавитно-цифровых символов и "_" 'characters'. Используйте maskedPattern назвать этот шаблон identifier.

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

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

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