模式
用于搜索和匹配文本的模式
描述
一个模式定义将文本与文本搜索函数相匹配的规则包含
,匹配
,提取
.你可以建立一个模式表达式使用模式函数、运算符和文本。例如,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,帕特);
显示每个字母出现次数的直方图。
信=低(字母);信=分类(字母);直方图(字母)
隐藏细节时,显示复杂的模式
使用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
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。