【问题标题】:MATLAB regexpi returns only one match [duplicate]MATLAB regexpi 仅返回一个匹配项 [重复]
【发布时间】:2018-06-03 08:18:18
【问题描述】:

我想提取包含在“t”标签中的数字。我在 MATLAB 中使用了以下命令:

str ='<t abc>1.3</t><t efg>32.3</t>';
[tokens] = regexpi(str,  '<t.*>(\d*\.\d*)</t>', 'tokens');
celldisp(tokens)

输出仅显示最后一场比赛 32.3。我不确定为什么 regexpi 只返回最后一场比赛?

【问题讨论】:

  • 表达式:&lt;t.*?&gt;(\d*\.\d*)&lt;/t&gt; 有效。这对我来说很令人困惑,因为您对第一个标签的表达式是贪婪的并且只返回第一个匹配项,而我的则是惰性的并且返回两个匹配项......

标签: regex matlab


【解决方案1】:

要捕获您需要的内容,您应该使用以下模式:&lt;t.*?&gt;(.*?)&lt;\/t&gt;

str ='<t abc>1.3</t><t efg>32.3</t>';
[tokens] = regexpi(str,  '<t.*?>(.*?)<\/t>', 'tokens')
celldisp(tokens)

结果就是你要找的:

tokens{1}{1} =

1.3

tokens{2}{1} =

32.3

【讨论】:

  • 您能解释一下为什么您的解决方案有效吗?我的理解和代码有什么问题?谢谢。
  • @zander 表达式不正确,因为您不只匹配数字。 @ubaabd 询问标签中的数字。对于输入str ='&lt;t abc&gt;12.3a&lt;/t&gt;&lt;t efg&gt;32ab.3&lt;/t&gt;',它返回{'12.3a'}{'32ab.3'}
  • @pkpkpk 在其上运行第二个regexpi 以获得您需要的内容。
  • @ubaabd 你的模式没有问题。出于某种原因,在 MATLAB 中,这种组合通常会为您提供最后一个匹配项,而不是所有匹配项。
  • @Zander 我指的是你发布的表达
猜你喜欢
  • 1970-01-01
  • 2011-07-14
  • 2014-01-20
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多