【问题标题】:Not able to find all groups using a pattern regex in matlab无法在matlab中使用模式正则表达式找到所有组
【发布时间】:2017-03-29 17:59:11
【问题描述】:

我正在尝试在 matlab 中解析正则表达式。我正在尝试为所有组提取“[]”之间的所有数字。以下是详细信息:

pat = '(\[\d,\d,\d,\d\])';
s1 = 'frame_1:[1,2,3,5],[11,22,33,44],[23,12,12,33],'

[matched_string] = regexp(s1,pat,'match');

>> matched_string{:}

ans =

    '[1,2,3,5]'

我想得到所有的盒子,即 [1,2,3,5],[11,22,33,44] 和 [23,12,12,33]。

谁能帮我弄清楚我做错了什么?

【问题讨论】:

  • 如果您只需要括号内的数字,请尝试pat = '\d+(?=[^]]*])';。或pat = '\[[\d,]+]' 匹配括号中的数字和逗号。
  • 它给了我:ans = '4' ans = '3'
  • 好吧,'\[[\d,]+]' 产生 { [1,1] = [1,2,3,5] [1,2] = [11,22,33,44] [1,3] = [23,12,12,33] }
  • pat = '[[\d,]+]' 工作谢谢,但我不知道为什么 ([\d,\d,\d,\d]) 不起作用?

标签: regex matlab


【解决方案1】:

您的模式仅匹配方括号内的单个数字。要匹配一个或多个,请在每个之后添加+

'(\[\d+,\d+,\d+,\d+\])'

如果你不关心方括号里面的格式,只需要提取方括号里面有数字和逗号,你可以使用更简单的

'\[[\d,]+]'

注意,正则表达式末尾的]在这里不是特殊字符,因为没有对应的[打开一个字符类,因此不需要转义它。

【讨论】:

  • 另一种收集不包含其他括号的括号集的变体:'\[[^\[\]]+]'
猜你喜欢
  • 2021-08-12
  • 1970-01-01
  • 2019-05-02
  • 2012-10-10
  • 2016-11-03
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多