2014-02-12 26 views
1

比方說,我有以下文件my_folder:如何爲regexpi編寫正確的表達式? - Matlab的

>> 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{:}] 

但它沒有工作......

+2

一個正則表達式可能看起來像這個'file_00 [1-3] \。txt'不知道這是不是你的意思。 – sln

+0

另外,如果你知道文件的名稱(並且只有3個),你爲什麼需要一個正則表達式? – Robin

+0

@sln:謝謝!但是沒有一個更靈活的正則表達式可以選擇任意數量的零後跟[1-3]中的任意數字的文件嗎?例如,如果我想選擇8到10個文件,那麼你的正則表達式將不能用於第10個文件,因爲只有一個0. – HappyPy

回答

2

在你的正則表達式:

file_[0]?[1-3].txt 
  • [0]?指一種或零0
  • .指任何字符(除了換行)。

所以,你的正則表達式匹配:

file_01.txt, file_01atxt, file_1atxt, file_3atxt 

,但如果你想匹配file_001.txt,file_002.txt它不會匹配

file_001.txt, file_002.txt, file_003.txt 

,file_003.txt那麼你應該使用評論中由sln描述的正則表達式:

file_00[1-3]\.txt 

這裏th e \.意思是一個點而不是任何字符

如果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 

+指一個或多個,而?表示一個或零。

+0

謝謝!是的,我真的想要一個正則表達式來選擇任何一個或多個零的文件(我認爲[0]?會做到這一點),後面是[1-3]中的任何數字。所以理想的正則表達式會選擇file_01.txt,file_002.txt,file_000003.txt等...... – HappyPy

+0

@HappyPy - 然後你想使用'+'。查看我的更新。 – acarlon

+0

非常感謝!這工作! – HappyPy