Matlab

您所在的位置:网站首页 matlab中strfind函数的用法 Matlab

Matlab

2024-07-13 06:36| 来源: 网络整理| 查看: 265

关于正则表达式的基本知识

正则表达式就是一个表达式(也是一串字符),它定义了某种字符串模式。利用正则表达式,可以对大段的文字进行复杂的查找、替换等。

matlab提供的正则表达式函数有三个:

regexp——用于对字符串进行查找,大小写敏感; regexpi——用于对字符串进行查找,大小写不敏感; regexprep——用于对字符串进行查找并替换。

第一部分——单个字符的匹配 1 句点符号 '.' ——匹配任意一个(只有一个)字符(包括空格)。 例如:t.n,它匹配tan、 ten、tin和ton,还匹配t#n、tpn甚至t n,还有其他许多无意义的组合。 Matlab例子程序: clear;clc

str='ten,&8yn2tin6ui>&ton, t n,-356tpn,$$$$t#n,4@).,t@nT&nY';

pat='t.n';

[o11,o22,o33]=regexpi(str,pat,'start','end','match');%输出起始位置和子串

2 方括号符号 '[oum]' ——匹配方括号中的任意一个 例如:t[aeio]n只匹配tan,Ten,tin和toN等。

3 方括号中的连接符 '[c1-c2]' ——匹配从字符c1开始到字符c2结束的字母序列

4 \n 等 ——特殊字符 下面是一些匹配单个字符的转义字符正则表达式及所匹配的值。 \xN或\x{N} 匹配八进制数值为N的字符 \oN或\o{N} 匹配十六进制数值为N的字符 \a Alarm(beep) \b Backspace \t 水平Tab \n New line \v 垂直Tab \f 换页符 \r 回车符 \e Escape \c 某些在正则表达式中有语法功能或特殊意义的字符c,要用\c来匹配,而不能直接用c匹配,如.用正则表达式.匹配,而\用正则表达式\匹配

5 \w,\s和\d——类表达式 和上面的\n等表中的转义字符有所不同,\w,\s,\d等匹配的不是某个特定的字符,而是某一类字符。具体说明如下: \w匹配任意的单个文字字符,相当于[a-zA-Z0-9_]; \s匹配任意的单个空白字符,相当于[\t\f\n\r]; \d匹配任意单个数字,相当于[0-9]; \S匹配除空白符以外的任意单个字符,相当于[^\t\f\n\r]——方括号中的^表示取反; \W匹配任意单个字符,相当于[^a-zA-Z0-9_]; \D匹配除数字字符外的任意单个字符,相当于[^0-9]。

第二部分串的匹配

1.多次匹配{nstart,nend}

比如,我们要匹配'ppp',那么就可以用正则表达式'ppp',还可以记为'p{3}'。

正则表达式中的'{}'用来表示匹配前面的表达式的出现次数。就是说,'p{2,3}',匹配'pp'和'ppp'。例如:

expr? 与expr匹配的元素出现0或1次,相当于{0,1} expr* 与expr匹配的元素出现1次或更多,相当于{0,} expr+ 与expr匹配的元素出现1次或更多,相当于{1,} expr{n} 与expr匹配的元素出现n次,相当于{n,n} expr{n,} 与expr匹配的元素至少出现n次 expr{n,m} 与expr匹配的元素出现n次但不多于m次

(1)假设匹配号码格式999-99-9999:[0-9]{3}-[0-9]{2}-[0-9]{4} (2)若连字符号可以出现也可以不出现:[0-9]{3}-?[0-9]{2}-?[0-9]{4}

(3)使用expr*时,matlab将尽可能的匹配最长的字符子串。

(4)如果我们希望匹配尽可能短的字符子串时,可以在上面我们使用的字符串后使用'?',也就是expr*?,如:

>> str='xyz';

regexp(str,'','match')

ans =

'' '' '' ''

 

regexp(str,'','match')

ans =

''

(5)expr*+

先执行expr*,"游标"(如果有的话)就指到了与expr*匹配的字符子串的最末端,然后从那里开始再检查下一个字符与后面的表达式是否匹配,如果匹配就继续向前(如果一直成功则返回最长的字符串),如果不匹配则直接返回空。

  2.逻辑运算符

'exp|exp2':或

(expr) 将expr标记为一组、匹配expr,并将匹配的字符子串标记起来以供后面使用。 (?:expr) 说明expr为一组,相当于数学表达式中的() 例如:?lstr='A body or collection of such stories'; ?regexp(lstr,'(?:[^aeiou][aeiou]){2,}','match') ans = 'tori' 上面的表达式中{2,}对[^aeiou][aeiou]起作用,如果去掉分组,则只对[aeiou]起作用,如下所示: ?regexp(lstr,'[^aeiou][aeiou]{2,}','match') ans = 'tio' 'rie' (?>expr) expr中的每个元素是一个分组 (?#expr) expr放在(?#和)之间是就是注释。 ^expr 匹配expr,并且出现在原字符串最前端的子串 expr$ 匹配expr,并且出现在原字符串最末端的子串 匹配expr,并且出现在一个单词最末端的子串 更严格的单词匹配,如:以s开头,并且以h结尾的单词 ?regexpi(hstr, '', 'match') ans = 'such' 3. 左顾右盼——利用上下文匹配 这个也比较容易理解。就是利用上下文的匹配来找到我们要找的内容。 expr1(?=expr2) 找到匹配expr1的子串,如果其后的字符串也匹配expr2 如,下面的例子查找所有在','之前的单词。  ? pstr = ['While I nodded, nearly napping, ' … 'suddenly there came a tapping,']; ?regexpi(pstr, '\w*(?=,)', 'match') ans = 'nodded' 'napping' 'tapping' expr1(?!expr2) 找到匹配expr1的子串如果其后的字符串不匹配expr2 下面的例子匹配所有不在','之前的单词 ?regexpi(pstr, '\w*+(?!,)', 'match') ans =  Columns 1 through 6 'While' 'I' 'nearly' 'suddenly' 'there' 'came' Column 7 'a' (? 下面的例子查找所有不在','之后的单词, ?regexpi(pstr,'(?



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3