2015-01-08 60 views
1

我想在測試中更改我的類名稱和方法的命名。有數百個,他們很長,很難閱讀。下劃線將有所幫助。REGEX Visual Studio 2013查找並更改

我創建正則表達式:

(public class [A-Z][a-z]*(_[A-Z][a-z]*)*)(?<x>[A-Z]) 

替換模式:$1_${x}

,讓我舉的例子: 來源:public class VeryLongClassNameTestScenarioTwentySeven

要:public class Very_LongClassNameTestScenarioTwentySeven

下使用:public class Very_Long_ClassNameTestScenarioTwentySeven

下一個使用:public class Very_Long_Class_NameTestScenarioTwentySeven

使用多次後,所有的名稱應該改變。你能幫我找到能立刻做到的正則表達嗎?

我想VS中的正則表達式不支持將字母從大寫轉換爲小寫?

感謝

+1

您可以使用外部工具來執行更改。 – Rots

+0

像Grepwin :) http://stefanstools.sourceforge.net/grepWin.html –

+0

它解決了大寫的問題。 但仍然需要正則表達式。任何想法如何創建一個可以一次完成的任務? – apukineimakiapudjuh

回答

1

我沒有訪問我的VS工作站的權利,但我認爲下面應該工作:

查找:$1_$2

(?<=public class .*?)([a-z])([A-Z])

與更換

(我在http://regexstorm.net/tester上測試)


編輯:現在,我坐在我的VS工作站前,這裏是我的測試結果:

它「種」的工作......奇怪的是,用下面的代碼:

public class ThisIsLongClassName 
{ } 

public class AnotherLongClassName 
{ } 

public class WhoaThisNameIsEvenLonger 
{ } 

現在,測試與 + 按Ctrl +˚F

  • 如果我做「查找下一個」,它正確跳轉之間的替換應該發生的位置之間跳轉。所以正則表達式是正確的。
  • 但是,當我單擊「替換」時,它將替換突出顯示的行下面的行。例如,亮點是在第一行的sI,變化發生在
  • 最後的rL,單擊「全部替換」什麼都不做

我認爲VS2013是b0rked。至少我的是。


編輯2:所以,我建議你創建一個小程序,讓它「一展身手」通過你的文件。將更簡單的正則表達式,因爲你所要做的就是確保.TrimStart() -ed行以'public class'開頭,然後在該行上做一個簡單的正則表達式替換([a-z])([A-Z])$1_$2

+0

感謝您的幫助。有一件事 - 我也認爲我的VS壞了。但是對於正則表達式[a-z]和[A-Z]來說,你必須檢查'匹配大小寫'。也許你已經忘記了。 – apukineimakiapudjuh

+0

不,沒有忘記那一個。正如我寫的,簡單的「查找」正常工作。使用正則表達式替換隻是簡單的。 – pepoluan

+1

可能是Visual Studio中的一個錯誤,我在使用更復雜的正則表達式執行替換時發現了類似的行爲。它通常不會對'Replace All'進行任何操作,只需使用Replace就可以讓它在交替的實例上執行操作。多次運行,按[Alt] + [R]最終將獲得所有實例除外。不如使用'Replace All'正確工作,但要比手工完成更好! – Zarepheth