零宽断言

零宽断言用于查找指定内容之前或之后的内容,不包括指定内容。有两种类型,即

零宽度正预测先行断言:表达式为(?=exp),查找exp表示的内容之前的内容。

零宽度正回顾后发断言:表达式为(?<=exp),查找exp表示的内容之后的内容。

组合上面两种情况,可以查找指定内容之间的内容。

下面给定原始字符串,要求提取出单位公斤前面的数字,只提取数字。使用零宽度正预测先行断言进行提取。

code.matlab
>> a='10公斤 20公斤 30公斤';
>> m=regexp(a,'\d+(?=公斤)&#x27;,'match')  %只取单位之前的数字
m =
  1×3 cell 数组
    {'10'}    {'20'}    {'30'}

正则表达式r'\d+(?=公斤)'表示匹配'公斤'前面的数字,不包括'公斤'。结果显示匹配正确。

下面给定原始字符串,要求提取出'同学'、'战友'、'师兄'等称谓后面的姓名。使用零宽度正回顾后发断言进行提取。

code.matlab
>> a='同学李海 战友王刚 师兄张三';
>> m=regexp(a,'(?<=同学|战友|师兄)\w+','match')  %只取称呼后面的姓名
m =
  1×3 cell 数组
    {'李海'}    {'王刚'}    {'张三'}

正则表达式r'(?<=同学|战友|师兄)\w+'表示匹配'同学'、'战友'或'师兄'等称谓后面的子字符串。各称谓使用分支条件进行匹配。匹配的结果不包括称谓。