3

我有一个包含数字或字母的字符串a,可能后跟ror l

在 MATLAB 中,以下正则表达式返回为

>> regexp('10r', '([0-9]*|a)(l|r)*', 'match')
ans = 
    '10r'

我希望10r分开,因为我有两个捕获组。有没有办法让一个单元格数组都独立返回?我在文档中看不到它。

4

2 回答 2

5

你想要“令牌”而不是“匹配”

>> 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'
于 2013-07-10T15:19:55.750 回答
0

如果你想匹配

要么有一个数字或字母 a,可能后跟rl作为*0 次或更多次的意思。

您还可以使用 [0-9]+ 来匹配至少一个数字,并使用字符类来匹配 r 或 l。

([0-9]+|a)([lr]?)

模式匹配:

  • ([0-9]+|a)捕获组 1,匹配 1+ 数字 0-9 或匹配a
  • ([lr])?捕获组 2,可选择匹配lr

正则表达式演示

为了防止部分匹配,您还可以使用单词边界:

\<([0-9]+|a)([lr]?)\>
于 2021-07-11T16:21:33.337 回答