我正在使用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。
答案 0 :(得分:0)
(?m)^signalA_\d+$
(?m)
启用多行模式(m
标志)。这允许^
和$
匹配每一行(而不仅仅是文件的开头/结尾)^
在行首处断言位置signalA_
按字面意思匹配\d+
匹配一个或多个数字$
断言行尾的位置答案 1 :(得分:0)
以下内容会将您的值列表过滤到您关注的事物(基于您的示例数据)。
filterOut = count(signals,"_") > 1;
signals(filterOut) = [];