我有一个包含数字或字母的字符串a
,可能后跟r
or l
。
在 MATLAB 中,以下正则表达式返回为
>> regexp('10r', '([0-9]*|a)(l|r)*', 'match')
ans =
'10r'
我希望10
和r
分开,因为我有两个捕获组。有没有办法让一个单元格数组都独立返回?我在文档中看不到它。
你想要“令牌”而不是“匹配”
>> 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'
如果你想匹配
要么有一个数字或字母 a,可能后跟r或l作为
*
0 次或更多次的意思。
您还可以使用 [0-9]+ 来匹配至少一个数字,并使用字符类来匹配 r 或 l。
([0-9]+|a)([lr]?)
模式匹配:
([0-9]+|a)
捕获组 1,匹配 1+ 数字 0-9 或匹配a
([lr])?
捕获组 2,可选择匹配l
或r
为了防止部分匹配,您还可以使用单词边界:
\<([0-9]+|a)([lr]?)\>