MATLAB 正则表达式

什么是正则表达式?

正则表达式是定义特定模式一序列字符。例如,在解析程序输入或处理文本块时,通常使用正则表达式搜索匹配模式的一组单词。


举例说明

比如,字符串向量 ‘Joh?n\w*’ 就是一个正则表达式,它定义了一种模式,以字母Jo开始, 后跟(可选)字母h(由“h?”表示), 接着后面是字母n,并以任意数量的单词字符结尾,即字母、数字或下划线(由‘\w*’表示)的字符。这个模式符合以下任何一种情况:

Jon, John, Jonathan, Johnny

为什么用正则表达式

正则表达式提供了一种独特的方法来搜索文本中的特定字符子集。正则表达式提供了查找特定字符模式的能力,而不是像使用strfind这样的函数那样查找精确的字符匹配。

例如,表示速度的几种方法是:

km/h
km/hr
km/hour
kilometers/hour
kilometers per hour

为了找出以上文本,你可以单独输入5次命令来分别匹配,比如:


strfind(text, 'km/h');
strfind(text, 'km/hour');
% 以此类推

这样就显得很麻烦,因此正则表达式就为我们提高了效率,正则表达式具有一个逐步判断或匹配的工作流程:

正则表达式图解
正则表达式工作流程

将上图的工作模式翻译成MATLAB正则表达式就是:


pattern = 'k(ilo)?m(eters)?(/|\sper\s)h(r|our)?';

现在就可以只用一个命令便可以查找相同意思的不同表达了,首先看下面这段文本:


text = ['The high-speed train traveled at 250 ', ...
   'kilometers per hour alongside the automobile ', ...
   'travelling at 120 km/h.'];

要找出里面表示速度的字符串,当然,我们知道文本中有“kilometers per hour”和“km/h”两个字符串符合我们的要求,那么怎么用写好的命令把它们找出来呢:


regexp(text, pattern, 'match') 
%结果:
ans =
  1×2 cell array
    {'kilometers per hour'}    {'km/h'}

可以注意到,我们使用了一个regexp()函数,它用于将我们写好的正则表达式(本例中的“pattern”)与文本(本例中的text)进行匹配('match')。


匹配/搜索函数

MATLAB 有四个使用正则表达式进行搜索和字符替换的函数 。前三个在它们接受的输入值和返回的输出值方面是相似的:

函数描述
regexp匹配正则表达式,区分大小写
regexpi匹配正则表达式,忽略大小写
regexprep使用正则表达式替换部分文本
regexptranslate将文本转换为正则表达式





公众号

关注公众号,获取一手资讯

“ MATLAB 正则表达式 ” comments 0

评论/回复

电子邮件地址不会被公开。 必填项已用*标注