主要内容

模式

用于搜索和匹配文本的模式

描述

一个模式定义将文本与文本搜索函数相匹配的规则包含匹配,提取.你可以建立一个模式表达式使用模式函数、运算符和文本。例如,MATLAB®从发布名称开始“R”之后是四位数的年份,然后是两者之一“一个”“b”.定义一个模式来匹配版本名称的格式:

帕特=“R”+ digitpattern (4) + (“一个”|“b”);

在字符串中匹配该模式:

str = [字符串是在R2016b中引入的。“R2020b中增加了模式。”];提取(str,帕特)
字符串数组"R2016b" "R2020b"

创建

模式由文字文本和使用+|,操作符。您还可以使用对象的功能,它们使用的规则通常与正则表达式相关:

  • 匹配字符模式—字母、数字、通配符、空格的范围,如lettersPattern

  • 搜索规则-模式必须出现多少次、大小写敏感、可选模式和命名表达式,例如asManyOfPattern而且optionalPattern

  • 边界-在特定字符的开始或结束处的边界,例如alphanumericBoundary.方法可以否定边界模式操作符,以便与边界的匹配阻止其模式表达式的匹配。

  • 组织模式—定义模式结构,并指定如何显示模式表达式,例如maskedPattern而且namedPattern

这个函数模式还使用语法创建模式函数,帕特=模式(txt),在那里三种是文字文本帕特匹配。模式函数对于为函数参数验证指定模式类型非常有用。然而,模式函数在其他情况下很少需要,因为MATLAB文本匹配函数接受文本输入。

对象的功能

全部展开

包含 确定pattern是否在字符串中
匹配 确定模式是否与字符串匹配
计算字符串中模式的出现次数
endsWith 确定字符串是否以模式结束
startsWith 确定字符串是否以pattern开头
提取 从字符串中提取子字符串
取代 查找并替换一个或多个子字符串
replaceBetween 替换起始点和结束点之间的子字符串
分裂 在分隔符处拆分字符串
擦除 删除字符串中的子字符串
eraseBetween 删除起始点和结束点之间的子字符串
extractAfter 在指定位置后提取子字符串
extractBefore 在指定位置之前提取子字符串
extractBetween 提取起始点和结束点之间的子字符串
insertAfter 在指定的子字符串之后插入字符串
方法 在指定的子字符串之前插入字符串
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 = [“这”“是一个”“1 x6”“字符串”“数组”“。”];帕特= lettersPattern;

使用包含来确定字符是否匹配帕特都存在于每个字符串中。中的前五个字符串显示输出逻辑数组三种包含字母,但第六个字符串不包含字母。

包含(txt,帕特)
ans =1 x6逻辑阵列1 1 1 1 1 1 0

确定文本是否以指定的模式开始。中的四个字符串显示输出逻辑数组三种以字母开头,但两个字符串不是。

帕特startsWith (txt)
ans =1 x6逻辑阵列1 1 0 1 10 0

确定字符串是否完全匹配指定的模式。输出逻辑数组显示输入的字符串中的哪个三种除了字母什么都不要。

匹配(txt,帕特)
ans =1 x6逻辑阵列1 0 0 1 10 0

计算模式匹配的次数。输出的数值数组显示了多少次lettersPattern的每个元素都匹配三种.请注意,lettersPattern匹配一个或多个字母,因此一组并发字母是单个匹配。

帕特计数(txt)
ans =1×61 2 1 1 1 0

digitsPattern是匹配数字字符的典型字符匹配模式。创建匹配数字字符的模式。

txt = [“1鱼”“2鱼”“(1,0,0)鱼”“[0,0,1]鱼”];帕特= digitsPattern;

使用取代编辑与模式匹配的文本片段。

替换(txt,帕特,“#”
ans =1 x4字符串“鱼”“鱼”“[#,#,#]鱼”“[#,#,#]鱼”

创建一个新的文本片段“啊!”匹配字母后的字符。

insertAfter (txt,帕特,“啊!”
ans =1 x4字符串“1 !鱼”“2 !鱼”“(0 0 1 ! ! !鱼”"[0!,0!,1!] fish"

模式可以使用OR操作符创建,|与文本。删除与指定模式匹配的文本。

txt =擦掉(txt,”、“|“]”|“(”
txt =1 x4字符串“1鱼”“2鱼”“100鱼”“001鱼”

提取帕特从新文本。

提取(txt,帕特)
ans =1 x4字符串1 2 100 001

使用模式来计算文本中单个字符的出现次数。

txt =“她在海边卖贝壳。”

创建帕特作为一个模式匹配单个字母的alphanumericsPattern.提取模式。

帕特= alphanumericsPattern (1);信=提取(txt,帕特);

显示每个字母出现次数的直方图。

信=低(字母);信=分类(字母);直方图(字母)

图中包含一个axes对象。axis对象包含一个类别直方图类型的对象。

使用maskedPattern显示一个变量来代替复杂的模式表达式。

构建一个匹配由数字和算术运算符组成的简单算术表达式的模式。

mathSymbols = asManyOfPattern(digitpattern | characterListPattern)“+ - * / = "), 1)
mathSymbols =模式匹配:asManyOfPattern(digitpattern | characterListPattern("+-*/="),1)

构建一个匹配算术表达式和字符之间的空格的模式mathSymbols

longExpressionPat = asManyOfPattern(mathSymbols + whitespacpattern) + mathSymbols . longExpressionPat = asManyOfPattern(mathSymbols + whitespacpattern) + mathSymbols . longExpressionPat = asManyOfPattern(mathSymbols + whitespacpattern
longExpressionPat =模式匹配:asManyOfPattern(asManyOfPattern(digitpattern | characterListPattern("+-*/="),1) + whitespaceppattern) + asManyOfPattern(digitpattern | characterListPattern("+-*/="),1)

显示的模式表达式很长,难以阅读。使用maskedPattern要显示变量名,mathSymbols,以代替模式表达式。

mathSymbols = maskedPattern (mathSymbols);shortExpressionPat = asManyOfPattern(mathSymbols + whitespacpattern) + mathSymbols
shortExpressionPat =模式asManyOfPattern(mathSymbols + whitespacpattern) + mathSymbols显示所有细节

创建一个包含一些算术表达式的字符串,然后从文本中提取模式。

txt =“1 + 1的答案是什么?”哦,我知道!1 + 1 = 2!”;shortExpressionPat算术=提取(txt)
算术=2 x1字符串"1 + 1" "1 + 1 = 2"

从两个命名的模式创建一个模式。命名模式为模式的显示添加了上下文。

构建两个模式:一个匹配以字母D开头和结尾的单词,另一个匹配以字母R开头和结尾的单词。

= letterBoundary + caseInsensitivePattern(“d”+ lettersPattern +“d”) + letterBoundary;rwordspus = letterBoundary + caseInsensitivePattern(“r”+ lettersPattern +“r”) + letterBoundary;

使用已命名的模式构建一个模式,找到一个以D开头和结尾的单词,后面跟着一个以R开头和结尾的单词。

dwordspit = dwordspit + whitespacpattern + rwordspit
dAndRWordsPat =模式匹配:letterBoundary + caseInsensitivePattern("d" + lettersppattern + "d") + letterBoundary + whitespaceppattern + letterBoundary + caseInsensitivePattern("r" + lettersppattern + "r") + letterBoundary

这种模式很难阅读,并且没有传达关于其目的的太多信息。使用namedPattern将模式指定为命名模式,以显示指定的名称和描述来代替模式表达式。

dWordsPat = namedPattern (dWordsPat,“dword”"以D开头和结尾的词");rWordsPat = namedPattern (rWordsPat,“rWords”"以R开头和结尾的单词");dwordspit = dwordspit + whitespacpattern + rwordspit
dAndRWordsPat =模式匹配:dWords + whitespacpattern + rWords使用命名模式:dWords:以D开头和结尾的单词rWords:以R开头和结尾的单词显示更多细节

创建一个字符串并提取与模式匹配的文本。

txt =“爸爸,看这条分开的河!”;dAndRWordsPat词=提取(txt)
文字=“分河”

建立一个易于阅读的模式来匹配电子邮件地址。

电子邮件地址遵循这个结构username@domain.TLD,在那里用户名而且由由句点分隔的标识符组成。构建匹配由字母、数字字符和的任意组合组成的标识符的模式“_”字符。使用maskedPattern要命名此模式标识符

标识符= asManyOfPattern(alphanumericpattern (1) | . asManyOfPattern“_”1);标识符= maskedPattern(标识符);

构建模式来匹配由标识符组成的域和子域。从指定的列表中创建匹配顶级域名的模式。

子域= asManyOfPattern(标识符+“。”) +标识符;域名= namedPattern(标识符,“域名”);tld =“com”|“org”|“政府”|“净”|“edu”

构建一个模式来匹配电子邮件的本地部分,它匹配一个或多个用句点分隔的标识符。通过结合前面定义的模式,构建匹配域、TLD和任何潜在子域的模式。使用namedPattern将这些模式分配给一个命名模式。

用户名= asManyOfPattern(标识符+“。”) +标识符;domain = optionalPattern(namedPattern(子域)+“。”) +...域名+“。”+...namedPattern (tld);

将所有模式组合成一个模式表达式。使用namedPattern分配用户名,emailPattern命名模式。

emailAddress = namedPattern(用户名)+“@”+ namedPattern(域);emailPattern = namedPattern (emailAddress)
emailPattern =模式匹配emailAddress: username +“@”+域命名模式:emailAddress: username +“@”+域用户名:asManyOfPattern(identifier +“。”)+标识符域:optionalPattern(子域+“。”)+域名+“。”+ tld subdomain: asManyOfPattern(identifier + ".") + identifier domainName: identifier tld: "com" | "org" | "gov" | "net" | "edu"显示所有详细信息

创建一个包含电子邮件地址的字符串,然后从文本中提取模式。

txt =“你可以通过电子邮件John.Smith@department.organization.org找到我。”;提取(txt emailPattern)
ans = " John.Smith@department.organization.org "

命名模式允许点索引,以便访问命名子模式。使用点索引为命名模式分配特定的值

emailPattern.emailAddress.domain =“mathworks.com”
emailPattern =模式匹配emailAddress: username +“@”+域使用命名模式:emailAddress: username +“@”+域用户名:asManyOfPattern(identifier +“。”)+标识域:"mathworks.com"显示所有详细信息

版本历史

介绍了R2020b

Baidu
map