2016-01-22 157 views
1

我使用Visual Studio的查找/替換工具來查找使用正則表達式的東西並進行替換。我找到了這個:Assert.IsTrue\(([^,;]*)\) *;和替換Assert.IsTrue($1, "$1");,所以這樣做是尋找除了逗號,和分號;括號中的每個Assert.IsTrue();,然後添加任何在引號內的括號和逗號後面, 。所以,如果我有Assert.IsTrue(wtv)它將被替換爲Assert.IsTrue(wtv,"wtv")Visual Studio:使用正則表達式替換查找/替換

的問題是當wtv有報價或斷裂線,所以如果我有

Assert.IsTrue("wtv" == "wtv")將被替換爲

Assert.IsTrue("wtv" == "wtv", ""wtv" == "wtv"")

Assert.IsTrue(wtv || 
wtv2) 

將被取代,以

Assert.IsTrue(wtv || 
wtv2, "wtv || 
wtv2") 

。我想要做的是在更換新行\ r和報價消除,因此在更換後的結果是

Assert.IsTrue("wtv" == "wtv", "wtv == wtv")

Assert.IsTrue(wtv || 
    wtv2, "wtv ||wtv2") 
+0

我會寫一個控制檯應用程序,它會做與正則表達式相同的嘗試使用有限的VS正則表達式。 – OmegaMan

+0

@OmegaMan最終會做什麼,我正在探索幾種可能性,並對這個問題感到好奇。謝謝 –

+0

我喜歡正則表達式,不要誤解我的意思;只是多行交叉難以在正則表達式中處理(通常由負面預測使用),但對模式的VS解釋幾乎不可能。 :-)問問並且確保你的帖子非常好。 – OmegaMan

回答

1

首先,我要澄清,這並未」 t真的解決了這個問題,只是一個討厭變通,不是一個真正的解決方案。我發佈它,以防萬一有人需要像我一樣的工作(我很懷疑,但很好)。不過,因爲這不是真正的答案,所以我不會這麼做(除非有人向我解釋說這不可能是真正的答案),並且總是歡迎新的答案。

我所做的是需要正則表達式添加幾組認爲([^,;"\r\n]*)任何東西首先看它不是一個逗號,分號,引號或換行,然後尋找(["\r\n]*) NE-線或分號,然後重複部分這種模式幾次。

因此,它將使用*它會查看它是否發生0次或更多次,並且在有多個逗號或多於一個換行符的情況下會重複多次(請注意,如果沒有,因爲我使用的是*,所以沒有問題)。而且,替代會是什麼樣子

Assert.IsTrue($1$2$3..., "$1$3$5..."); 

,其中在第一個參數我把所有的號碼,並在引號我只放了奇數,因爲即使是要麼不存在,要麼報價/新線。

我用的這31個,因此,如果有超過15組的逗號/新線,也不會被發現和更換 的發現

Assert.IsTrue\(([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)(["\r\n]*)([^,;"\r\n]*)\) *; 

替換

Assert.IsTrue($1$2$3$4$5$6$7$8$9$10$11$12$13$14$15$16$17$18$19$20$21$22$23$24$25$26$27$28$29$30$31, "$1$3$5$7$9$11$13$15$17$19$21$23$25$27$29$31"); 

這適用於我提供的示例以及少於15組逗號/換行的任何示例,如果我能想出更好的東西(因爲這是一個非常糟糕的解決方案),我會在此處添加它。

+0

請注意,這會慢得多,你添加的捕獲組越多,它就會越慢。 –