2011年8月5日 星期五

字串置換(取代)應用 (RegularExpressions 的 Replace)

今天看到同事寫的一個字串置換功能程式,
發現真是太好用啦,趕緊記下來以免日後忘了。

首先要講個事件原由,
因為有個由使用者輸入的字串,
但字串中不能寫入特殊字元 "[" "]" "*" "%"
一般的寫法如下

    If keyWord.Contains("[") Then
        keyWord = keyWord.Replace("[", "要取代的字串")
    End If
    If keyWord.Contains("]") Then
        keyWord = keyWord.Replace("]", "要取代的字串")
    End If
 '...略
 

萬一要取代的字串和特殊字元重疊,會造成前面置換成功的特殊字元再次被取代,
例如每個特殊字元的前後都要用 "[" "]" 包起來時
一般寫法如下:
 If keyWord.Contains("[") Then
        keyWord = keyWord.Replace("[", "[[]")
    End If
    If keyWord.Contains("]") Then
        keyWord = keyWord.Replace("]", "[]]")
    End If
 '...略

 '假設第一次的 Keyword 為 "select [abc] "
 '會被取代成 "select [[]abc] "
 '到第二個判斷式時,
 '要取代 "]" 時就會變成 "select [[[]]abc[]] "
 '這樣一來就全亂了。
 

這時有個解法,就是使用 Regular Expressions 的 Replace
前提是需引用 System.Text.RegularExpressions

講解一下參數的用法,
判斷式的寫法 (?<自定參數名稱>\跳脫字元)
這裡的 matchReplace 是參數名稱,也可以自己命名為 abc 或 def ...隨你高興
要置換的字元就是斜線後接的跳脫字元,

例如我想把字串中所有 "[" 符號的字全都替換成 "==[=="
可以寫成


若是連 "]" 也要換成 "==]==",
可以寫成

中間加入的 "|" 表示 or,也就是說我不管是 "[" 或是 "]" 我都要換成 "==[==" 或 "==]=="

當然要替換的字也不一定要包括原有符號
假設要將 "[" 換成 "^_^"
那就寫成


使用方式可參考線上 MSDN

同樣的 RegularExpressions 在 N++ 或是其它文書軟體都有類似的功能,
在大量替換(取代)特定資料時非常有用
例如 N++ 的說明中有一段範例,假設要把德國的年月日組合方式改成常用格式,做法如下

有木有呀,這裡的 Search 和 Replace 就有用到 Regular 的方式了。

善用 RegularExpressions 不但快速,還可以省下很多程式開發時間呢!!

沒有留言:

張貼留言