2010-11-08 125 views
0

我需要將任意良好的舊DOS通配符字符串轉換爲正則表達式字符串,然後與System.Text.RegularExpressions.Regex一起使用。不幸的是,我的正則表達式知識很尷尬。翻譯文件名通配符爲正則表達式

我試圖圍繞像*.*.**.這樣的東西。我目前的問題是,*.通常需要匹配以點或以無點爲結尾的文件。
所以我翻譯*.^.+[^\.].*$,但這顯然是錯誤的。它不僅匹配blahblah.,而且還匹配blah.blah

那麼什麼是正確的正則表達式語法匹配blahblah.,但不是blah.blah

回答

1

我覺得下面的工作對你

^[^.]+\.{0,1}$ 

從字符串的開始匹配任何字符,但。和字符串可以用0或1結束的。

+0

感謝您關注此問題,您的訣竅是。 – sbi 2010-11-08 16:05:09

+1

'\。{0,1}'與'\。?'相同 – Andrey 2010-11-08 16:06:10

+0

(呵呵,結果我不能創建一個名爲'blah.'的文件,試圖創建一個'blah'文件。) – sbi 2010-11-08 16:06:21

0

我似乎無法創建一個名稱結束有一個點一個文件,但我觀察到的水珠*.將匹配姓名的開始如果名稱中沒有其他點,則用點。例如,它匹配.cvspass,但不匹配.antelope.cfg。它也匹配沒有點的名字。正則表達式將是^\.?[^.]+$

「結束」等價物將是^[^.]+\.?$,但我不認爲你需要這樣做。如果您還需要在開始結束時匹配(但無處可見),則可以使用^\.?[^.]+\.?$。如果這兩個條件互相排斥,請使用^(?:\.?[^.]+|[^.]+\.)$