Matlab Regexp - 确保字符串

时间:2018-02-01 19:37:12

标签: regex matlab

我正在使用Matlab的regexp来尝试比较字符串。

我的数据有多个信号,我试图将这些信号与某些字符串匹配。我的问题是,与我的字符串匹配的一些信号在末尾有额外的字符,所以我不想与这些信号匹配。

我的数据格式化示例如下:

signalA_1
signalA_1_extra
signalA_2
signalA_2_extra
...
signalA_99
signalA_99_extra
...
signalB_1
signalB_1_extra
...
signalZ_1
signalZ_1_extra

我希望与signalA_1 - signalA_99匹配,但不希望signalA_1_extra - signalA_99_extra

我尝试过类似的事情:

for i = i:length(signals)
  sig = signal(i)
  if startsWith(sig, 'signalA')
    if regexp(sig, 'signalA_\d*[^\.]+')
      store signal
    end
  end
end

我也尝试过:

regexp('signalA_[\d]*^.')
regexp('signalA_[\d]+[^\.]')
regexp('signalA_\d\d^.')

和其他人。

另外,我想我也可以消除startsWith步骤,只使用一个表达式。

提前感谢帮助。

编辑: 它也可能是一位或两位数字。是\ d +,[\ d] +或\ d *是正确的形式?

另请注意,我只想要signalA_1-99。不是信号B-Z。

2 个答案:

答案 0 :(得分:0)

See regex in use here

(?m)^signalA_\d+$
  • (?m)启用多行模式(m标志)。这允许^$匹配每一行(而不仅仅是文件的开头/结尾)
  • ^在行首处断言位置
  • signalA_按字面意思匹配
  • \d+匹配一个或多个数字
  • $断言行尾的位置

答案 1 :(得分:0)

以下内容会将您的值列表过滤到您关注的事物(基于您的示例数据)。

filterOut = count(signals,"_") > 1;
signals(filterOut) = [];