假设我在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{:}]
但它不起作用......
答案 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
+
表示一个或多个,而?
表示一个或零。