matlab的正则表达式
第一部分——单个字符的匹配
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='<tr valign=top><td><a name="19184"></a>xyz';
regexp(str,'<.*?>','match')
ans =
'<tr valign=top>' '<td>' '<a name="19184">' '</a>'
regexp(str,'<.*>','match')
ans =
'<tr valign=top><td><a name="19184"></a>'
(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 匹配expr,并且出现在一个单词最前端的子串
expr> 匹配expr,并且出现在一个单词最末端的子串
<expr> 更严格的单词匹配,如:以s开头,并且以h结尾的单词
?regexpi(hstr, '<s\w*h>', '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'
(?<=expr1)expr2 找到匹配expr2的子串,如果其前面的字符串也匹配expr1
下面的例子查找所有在','之后的单词,注意:','之后可能有空格
?regexpi(pstr,'(?<=,\s*)\w*','match')
ans =
'nearly' 'suddenly'
(?<!expr1)expr2 找到匹配expr2的子串,如果其后的字符串不匹配expr1
下面的例子查找所有不在','之后的单词,
?regexpi(pstr,'(?<!,\s*)\w*','match')
ans =
Columns 1 through 6
'While' 'I' 'nodded' 'early' 'napping' 'uddenly'
Columns 7 through 10
'there' 'came' 'a' 'tapping'
来源:https://blog.csdn.net/yf210yf/article/details/42421523
第三部分
tline= '530414.360 3390859.100 24.480 2719';
lineData = regexp(tline, strcat('\',divisionType,'+'), 'split');%使用'split'关键字在空格处拆分字符,空格可以是一个或者多个空格

matlab的正则表达式的更多相关文章
- matlab的正则表达式讲解[转]
引言.啥是正则表达式?正则表达式是干啥的?我理解就和我们在word或者其他编辑软件里点的查找.替换的作用是差不多的,不过功能要强大的多,当然使用起来也稍微复杂一些.书上的定义差不多是这样的:正则表达式 ...
- Matlab—regexp正则表达式
原文转自:http://blog.csdn.net/yf210yf/article/details/42421523 关于正则表达式的基本知识 正则表达式就是一个表达式(也是一串字符),它定义了某种字 ...
- Matlab获取文件夹下所有文件名并将数据按矩阵赋值给变量
一.获取一个文件夹下所有文件名: fileFolder=fullfile('D:\MATLAB\bin\trc'); dirOutput=dir(fullfile(fileFolder,'*.trc' ...
- MATLAB里的正则表达式 [转]
正则表达式在处理字符串及文本时显得十分方便,在perl, python等脚本语言,以及java, .net等平台上都支援正则表达式.事实上,在MATLAB中也提供了正则表达式的支持.主要包含三个常用的 ...
- MATLAB 正则表达式(一)(转)
http://blog.sina.com.cn/s/blog_53f29119010009uf.html 正则表达式这个词上大学的时候就听同寝室的一个家伙常念叨——那家伙当然很厉害啦,现在已经发洋财去 ...
- matlab 正则表达式
regexprep Replace text using regular expression collapse all in page Syntax newStr = regexprep(str,e ...
- 【原创】开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- Matlab的部分文件操作
Author:Maddock Date:2015-01-20 判断文件是否存在 infilename = [str,'\lena.jpg']; sgc_exist = exist(infilename ...
- matlab clear
clear 删除工作空间中的项目,释放系统内存 语法: clear clear name clear name1 name2 name3... clear global name clear -reg ...
随机推荐
- 在 SQL 中 快速 批量 插入数据的方法
方法1:逐条执行,速度慢. INSERT INTO testimport (name, message) VALUES ('testname', 'jfksdfkdsfjksadljfkdsfjsdl ...
- Response的应用
1.HttpServletResponse概述 service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServl ...
- pychram 中 Terminal 中 git log 中文乱码解决办法
添加环境变量 set LESSCHARSET=utf-8 执行以下命令 git config --global core.quotepath false 不成功执行以下命令 git config -- ...
- VC6.0- C语言-winsocket-警告warning C4761
错误介绍 操作系统:windows10 IDE:VC6.0 语言:C语言 项目内容简介:编写一个双人网络海战棋对战游戏 警告类型:警告warning C4761 integral size misma ...
- [NOIP2018 PJ T4]对称二叉树
题目大意:问一棵有根带权二叉树中最大的对称二叉树子树,对称二叉树为需满足将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等. 题解:在对称二叉树中,对于深度相同的两个节点$u,v$ ...
- Libev库学习
Libev库学习 https://www.cnblogs.com/wunaozai/p/3950249.html Libev库学习(1)https://www.cnblogs.com/wunaozai ...
- 那些年,Linus torvalds大神喷过的技术
Linus Torvalds 被认为是最伟大的程序员之一,因为他写出了使用最广泛的软件,如 Linux 内核和 Git 版本控制系统.但是他这个人经常因为讲话带有情绪,甚至是因为带有脏话的意见而饱受非 ...
- PHP基础之输出缓冲区基本概念、原理分析
一.概念 在PHP运行的过程中,可以将会产生输出的函数或操作结果暂时保存在PHP的缓冲区,只有当缓冲区满了.或者PHP运行完毕.或者在必要时候进行输出,才会将数据输出到浏览器,此缓冲数据的区域称为PH ...
- Core Animation笔记(特殊图层)
1.shapeLayer: 渲染快速,内存占用小,不会被图层边界裁掉(可以在边界之外绘制),不会像素化(当做3D变化如缩放是不会失真) CGRect rect = self.containerView ...
- MySql时区修改
1.查看当前时间 > select curtime(); #或select now()也可以+-----------+| curtime() |+-----------+| 15:18:10 | ...