我有一个字符串,其中包含数字或字母a
,可能后跟r
或l
。
在MATLAB中,以下正则表达式返回为
>> regexp('10r', '([0-9]*|a)(l|r)*', 'match')
ans =
'10r'
我希望单独10
和r
,因为我有两个捕获组。有没有办法获得一个单独返回的单元格数组?我在文档中看不到它。
答案 0 :(得分:4)
你想要'代币'而不是'匹配'
>> toks = regexp('10r', '([0-9]*|a)(l|r)*', 'tokens');
>> toks{1}
ans =
'10' 'r'
或者,如果你想获得幻想,请为令牌命名并获取结构数组:
>> toks = regexp('10r', '(?<number>[0-9]*|a)(?<letter>l|r)*', 'names');
>> toks
toks =
number: '10'
letter: 'r'
答案 1 :(得分:0)
如果你想匹配
<块引用>可以是数字或字母 a,可能后跟 r 或 l,因为 *
表示 0 次或多次。
您也可以使用 [0-9]+ 来匹配至少一个数字,并使用字符类来匹配 r 或 l。
([0-9]+|a)([lr]?)
模式匹配:
([0-9]+|a)
捕获组 1,匹配 1+ 个数字 0-9 或匹配 a
([lr])?
捕获 group 2,可选择匹配 l
或 r
为了防止部分匹配,您还可以使用单词边界:
\<([0-9]+|a)([lr]?)\>