系統環境:Windows 8.1 Enterprise Update 2 x64
開發環境:Mircosoft Visual Studio Ultimate 2013 Update 2 RC
問題:如何在Visual Studio中使用正則表達式匹配換行符,空白符,Tab符等特殊符號,并且在當前文檔或當前項目或整個解決方案中批量替換你指定的代碼文字?
例子:
1 /// <summary> 2 /// 根據條件查詢表中所有數據 3 /// </summary> 4 /// <param name="tableName">要分頁顯示的表名</param> 5 /// <param name="fieldShow">以逗號分隔的要顯示的字段列表,如果不指定,則顯示所有字段</param> 6 /// <param name="fieldOrder">以逗號分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序順序</param> 7 /// <param name="where">查詢條件</param> 8 /// <returns></returns> 9 List<T> GetAllData<T>(string tableName, string fieldShow, string fieldOrder, string where) where T : new();
答案:
在Visual Studio IDE 中按 Ctrl+Shift+H 打開[在文件中替換]的窗口,
在{查找內容(N):}文本框中輸入:
</returns>[\s]+[^\S\r\n]+List<T>
或者
</returns>[\r\n]+[^\S\r\n]+List<T>
在{替換為(P):}文本框中輸入:
</returns>\r\n\t\t[Obsolete("不建議使用該方法,請使用同簽名的方法代替。")]\r\n\t\tList<T>
在{查找范圍(L):}下拉框中選擇,你需要查找的范圍,因為我是要整個當前項目中所有匹配項替換,所以我選擇的是"當前項目"。
按{全部替換(A)},就會把所有匹配項全部替換成你所需要替換的內容了。
這次我批量替換了共67個文件,67行。
解答:這次我是想在XML注釋的尾部以及該尾部的下一行首單詞中間添加一行
[Obsolete("不建議使用該方法,請使用同簽名的方法代替。")]
XML尾部是</returns>,而該尾部的下一行首單詞是List<T>,在這兩行之間有幾個我們看不見的轉義符\r\n\t,然而如果我們把正則表達式寫成這樣:
</returns>[\r\n\t]+List<T> 或者 </returns>[\r\n]+[\t\t]+List<T>
你將無法匹配到任何行。
因為在Visual Studio,你若需要匹配換行符以及空白符,需要配合[\S\s]以及[^]。
而\S\s是什么意思呢?
大寫的\S是匹配任何非空白字符。
小寫的\s是匹配任何空白字符,其中包括空格,制表符和換頁符。
而^是將匹配字符串錨定到行首或字符串首。
+就不用說了吧?是匹配前面表達式的一個或更多匹配項(并匹配盡可能多的字符)。
因為行尾包含\r\n,所以你可以用[\r\n]或者[\s],在不確定有多少個這樣的特殊轉義符的情況下,使用[\r\n]+或者[\s]+
重點來了,因為要匹配下一行,即換行,所以你還需要加個^,在你有用Visual Studio內置格式化的情況下,雖然行首是一個\t或以上,但是你仍然要用\S來替代,組合起來就是[\S\r\n]+。
拼接起來就得到了</returns>[\s]+[^\S\r\n]+List<T>了。
而在{替換為(P):}那里,比較簡單,就不做詳述了。
參考Visual Studio 官方MSDN在線幫助文檔:http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx
文章列表