主要内容

模式

模式搜索和匹配的文本

描述

一个模式定义了规则匹配文本的文本搜索功能包含,匹配,提取。你可以建立一个模式表达式使用模式函数、操作符和文字文本。例如,MATLAB®释放的名字,开始“R”,其次是四位数,然后“一个”“b”。定义一个模式匹配的格式发布的名字:

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

在字符串匹配模式:

str = [介绍了“R2016b。”在R2020b”模式增加了。”];提取(str,帕特)
ans = 2 x1字符串数组“R2016b”“R2020b”

创建

模式是由文字文本和其他模式使用+,|,~操作符。您还可以创建通用的模式使用对象的功能常与正则表达式,使用规则:

  • 匹配字符模式字母或数字的范围,通配符,或空白,如lettersPattern

  • 搜索规则——模式必须发生多少次,灵敏度,可选模式,和命名表达式等asManyOfPatternoptionalPattern

  • 边界——边界的开始或结束的特殊字符,如alphanumericBoundary。边界模式可以使用的否定~运营商,这样匹配的边界阻止匹配模式表达式。

  • 组织模式——定义模式结构和指定如何显示模式表达式,如maskedPatternnamedPattern

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

对象的功能

全部展开

包含 确定字符串的模式
匹配 确定模式匹配字符串
计数模式的字符串
endsWith 确定字符串结尾的模式
startsWith 确定字符串开始的模式
提取 从字符串中提取子字符串
取代 查找和替换一个或更多的子字符串
replaceBetween 开始点和结束点之间的子字符串替换
分裂 在分隔符分割的字符串
擦除 删除字符串中的子字符串
eraseBetween 删除子字符串的开始点和结束点之间
extractAfter 提取子字符串在指定位置
extractBefore 提取子字符串在指定位置
extractBetween 开始点和结束点之间提取子字符串
insertAfter 后插入字符串指定的子字符串
方法 插入字符串之前指定的子字符串
digitsPattern 匹配数字字符
lettersPattern 匹配字母字符
alphanumericsPattern 匹配字母和数字字符
characterListPattern 匹配字符的列表
whitespacePattern 匹配空格字符
wildcardPattern 匹配任何类型的几个字符
optionalPattern 使匹配模式可选
possessivePattern 匹配模式没有回溯
caseSensitivePattern 匹配模式的区分大小写
caseInsensitivePattern 匹配模式的情况
asFewOfPattern 匹配模式尽可能几次
asManyOfPattern 尽可能多地匹配模式
alphanumericBoundary 匹配字母和非字母数字的字符之间的界限
digitBoundary 匹配数字字符和数字字符之间的界限
letterBoundary 匹配字母字符之间的边界和nonletter字符
whitespaceBoundary 匹配空格字符之间的边界和非空字符
lineBoundary 比赛开始或结束
textBoundary 匹配文本的开始或结束
lookAheadBoundary 匹配边界之前指定的模式
lookBehindBoundary 匹配边界后指定模式
regexpPattern 模式匹配指定的正则表达式
maskedPattern 模式与指定的显示名称
namedPattern 指定命名模式

例子

全部折叠

lettersPattern是一个典型的匹配字符模式匹配字母字符。创建一个模式匹配一个或多个字母字符。

txt = [“这”“是一个”“1 x6”“字符串”“数组”“。”];帕特= lettersPattern;

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

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

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

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

确定指定的字符串完全匹配的模式。输出逻辑数组显示的字符串三种只包含字母。

匹配(txt,帕特)
ans =1 x6逻辑阵列1 0 0 1 1 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"

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

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

提取帕特新文本。

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

使用模式来计算单个字符的出现次数在一段文字。

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

创建帕特作为一个模式对象匹配单个字母使用alphanumericsPattern。提取模式。

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

显示每个字母出现的次数的柱状图。

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

图包含一个坐标轴对象。坐标轴categoricalhistogram类型的对象包含一个对象。

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

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

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

建立一个模式匹配使用算术表达式之间的空白字符mathSymbols

longExpressionPat = asManyOfPattern (mathSymbols + whitespacePattern) + mathSymbols
longExpressionPat =模式匹配:asManyOfPattern (asManyOfPattern (digitsPattern | characterListPattern (" + - * / = "), 1) + whitespacePattern) + asManyOfPattern (digitsPattern | characterListPattern (" + - * / = "), 1)

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

mathSymbols = maskedPattern (mathSymbols);shortExpressionPat = asManyOfPattern (mathSymbols + whitespacePattern) + mathSymbols
shortExpressionPat =模式匹配:asManyOfPattern (mathSymbols + whitespacePattern) + mathSymbols显示所有的细节

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

txt =“1 + 1的答案是什么?哦,我知道!1 + 1 = 2 !”;shortExpressionPat算术=提取(txt)
算术=2 x1字符串“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 =模式匹配:letterBoundary + caseInsensitivePattern (“d”+ lettersPattern +“d”) + letterBoundary + whitespacePattern + letterBoundary + caseInsensitivePattern (r + lettersPattern + r) + letterBoundary

这种模式很难阅读,不传达信息的目的。使用namedPattern指定的模式作为命名模式显示指定的名称和描述的模式表达式。

dWordsPat = namedPattern (dWordsPat,“dword”,“与D开始和结束的单词”);rWordsPat = namedPattern (rWordsPat,“rWords”,“与R单词的开始和结束”);dAndRWordsPat = dWordsPat + whitespacePattern + rWordsPat
dAndRWordsPat =模式匹配:dword + whitespacePattern + rWords使用命名模式:dword:单词与D rWords:开始和结束的单词,开始和结束与R显示更多的细节

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

txt =“爸爸,看看分裂河!”;dAndRWordsPat词=提取(txt)
话说= " /河”

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

电子邮件地址结构username@domain.TLD,在那里用户名由标识符隔开。建立一个模式匹配任何字母数字字符的组合,组成的标识符“_”字符。使用maskedPattern命名此模式标识符

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

构建模式匹配域和子域组成的标识符。创建一个模式匹配提取从一个指定的列表。

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

建立一个模式匹配本地电子邮件的一部分,匹配一个或多个标识符隔开。建立一个模式匹配的域,TLD,任何潜在的子域结合前面定义的模式。使用namedPattern分配每一个模式来命名模式。

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

结合所有的模式为单一模式表达式。使用namedPattern分配用户名,,emailPattern命名模式。

emailAddress = namedPattern(用户名)+“@”+ namedPattern(域);emailPattern = namedPattern (emailAddress)
emailPattern =模式匹配emailAddress:用户名+“@”+域使用命名模式:emailAddress:用户名+“@”+域用户名:asManyOfPattern(标识符+“。”)+标识域:optionalPattern(子域名+“。”)+域名+“。”+tld subdomain : asManyOfPattern(identifier + ".") + identifier domainName: identifier tld : "com" | "org" | "gov" | "net" | "edu" Show all details

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

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

命名模式允许dot-indexing为了访问命名的子模式。使用dot-indexing分配一个特定的值指定的模式

emailPattern.emailAddress。域=“mathworks.com”
emailPattern =模式匹配emailAddress:用户名+“@”+域使用命名模式:emailAddress:用户名+“@”+域用户名:asManyOfPattern(标识符+“。”)+域标识符:“mathworks.com”显示所有的细节
介绍了R2020b