2014-01-06 38 views
1

是否有任何簡單的選項在C#中執行MSDOS樣式模式匹配?如何實現MSDOS樣式模式匹配(通配符)?

我很喜歡RegEx;不過,我需要msdos風格的模式匹配。

預期樣品:

foo???.txt 
*.bat 

我覺得@ zmbq的回答是有道理的。我想確保我不會錯過.NET中的任何內置功能。我想我必須創建一個擴展方法Dos2RegExPattern,它將msdos模式轉換爲正則表達式並在我的應用程序中使用它。

+2

你是什麼意思的「MSDOS風格模式匹配」?通配符?你能舉一個「MSDOS風格模式匹配」的例子嗎? – Bit

+0

我已編輯帖子以匹配答案(可能是您想要的)。如果你想要不同的東西,隨意編輯。 –

+0

謝謝阿列克謝,例子很好。 –

回答

4

您可以將MS-DOS模式轉換爲標準的正則表達式格式。將?更改爲.*.*,並且不要忘記轉義其他字符(.變爲\.)。

因此,例如,*.bat變成.*\.batfile???.dat變成file...\.dat

編輯:

由於@hvd在評論中指出,?在MS-DOS匹配一個或沒有字符,這取決於它的位置(file???.dat比賽的所有文件與字符後3 file,但沒有按f?ile.dat不匹配file.dat)。我懷疑任何用戶會發現...

+0

我認爲OP正在尋找相反的東西。將regex轉換爲dos。也許這是說同樣的事情。 – paqogomez

+1

即將發佈相同的答案,但我會用它的貪婪版本替換*。而不是 – BlackBear

+0

我當然希望不會,其他方式是不可能的,MS-DOS的模式比正則表達式弱。 – zmbq

-1

在.NET中,不: -

Directory.GetFiles (path, pattern) 

做完全OP想要什麼(見this page)?