- 檔名大小寫問題
要做不分大小寫的比對,或是統一轉大寫或小寫...
Sring.ToUpper()/ToLower()/Compare() - 以特定字串起始、結束、或包含該字串
可能會用到String.StartsWith()/EndsWith()/Contains()... - 以特定符號分隔
如:底線。
可能會用到String.Split() - 必須包含數字
如:版本號。
取檔名的第n位到第m位,並TryParse為Integer...
但透過使用「正規表示式」(Regular Expression)的話,這件事就變得簡單很多。
以預想的目標,想在一堆的檔名清單中,找到:「以"ken_"開頭,緊接著2位數字的txt檔」
程式只要使用Regex的Pattern為:"^ken_\d{2}.txt"
由於檔名通常是不區分大小寫(case-insensitive),所以在字串比對的時候,也要注意,判斷時加上 RegexOptions.IgnoreCase 的設定就搞定了!!
//要被過濾的檔案清單 string[] filelist= { "abc_abc.txt", "kenlai_01.txt", "ken_88.txt", "DEF.exe", "ken_99.TXT" }; //過濾規則 Regex searchPattern = new Regex("^ken_\d{2}.txt", RegexOptions.IgnoreCase); //結果 var newlist = (from f in filelist where searchPattern.IsMatch(f) select f); return newlist; // output: "ken_88.txt","ken_99.TXT"
是不是比寫一堆code簡單多了?
整個比對的程式碼,從至少10行濃縮到2行!!
以後要改搜尋的規則,也只要修改這個Pattern就好了!
誠如洪朝貴老師所說,Regular Expression 真是一種低成本, 高報酬的學習投資!
也不禁讚嘆 Regular Expression 這個歷久彌新的神物啊~~
延伸閱讀:
- Regexp 是什麼東東?
- Regex 類別
- Regular Expression Library : 這裡可以找到好心人提供的眾多Pattern...
- Regexpal: 可線上測試Regex Pattern的網站
- [.NET]使用 Regex 來 Parse 台灣的地址
沒有留言:
張貼留言