如何为regexpi编写正确的表达式? - Matlab

时间:2014-02-12 21:07:55

标签: regex matlab

假设我在my_folder中有以下文件:

>> dir('my_folder')

file_001.txt file_002.txt file_003.txt file_004.txt file_005.txt file_006.txt file_007.txt file_008.txt file_009.txt file_010.txt

并希望在Matlab中创建一个包含1到3文件的变量。 我使用正则表达式尝试了以下内容:

>> f = dir('my_folder')
>> f1 = regexpi({f.name}, 'file_[0]?[1-3].txt', 'match')
>> f2 = [f1{:}]

但它不起作用......

1 个答案:

答案 0 :(得分:2)

在你的正则表达式中:

file_[0]?[1-3].txt
  • [0]?表示一个或零0
  • .表示任何字符(换行符除外)。

所以你的正则表达式将匹配:

file_01.txt, file_01atxt, file_1atxt, file_3atxt

但不匹配

file_001.txt, file_002.txt, file_003.txt

如果你想匹配file_001.txt,file_002.txt,file_003.txt,那么你应该在评论中使用sln描述的正则表达式:

file_00[1-3]\.txt

这里\.字面意思是一个点而不是任何字符

如果00是可选的(我假设这就是您使用?的原因)并且您还想匹配file_1.txt,file_2.txt,file_3.txt,file_01.txt等那么正则表达式会是:

file_0*[1-3]\.txt

此处*表示零个或多个字符(在这种情况下为0)。

根据评论进行更新

如果你想要至少前一个零,那么你可以使用:

file_0+[1-3]\.txt

这将匹配:

file_01.txt, file_02.txt, file_03.txt, file_001, etc

+表示一个或多个,而?表示一个或零。