Visual Studio:使用正则表达式查找/替换以替换

时间:2016-01-22 22:33:20

标签: regex visual-studio visual-studio-2012

我正在使用visual studio的查找/替换工具来查找使用正则表达式的内容并进行替换。我在查找中有这个:Assert.IsTrue\(([^,;]*)\) *;和替换Assert.IsTrue($1, "$1");,所以它的作用是在括号中查找除{com} Assert.IsTrue();和分号,之外的所有;。 {1}},然后在引号内和括号,后添加括号内的内容。因此,如果我有Assert.IsTrue(wtv),则会将其替换为Assert.IsTrue(wtv,"wtv")

问题是当wtv有引号或断行时,所以如果我有

Assert.IsTrue("wtv" == "wtv")它将被替换为

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

Assert.IsTrue(wtv ||
wtv2)

将被替换为

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

。我想要做的是在替换新行\ r \ n和引号中消除,因此替换后的结果是

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

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

1 个答案:

答案 0 :(得分:1)

首先我要澄清一点,这并没有真正解决问题,只是一个讨厌的解决方案,而不是一个真正的解决方案。我发布它以防万一有人需要像我一样的工作(我怀疑它,但很好)。尽管如此,由于这不是真正的答案,我不会将其标记为(除非有人向我解释说它不可能是真正的答案),并且总是欢迎新答案。

我所做的是在需要正则表达式的部分中添加了几个([^,;"\r\n]*)首先查找它不是逗号,分号,引号或换行符的组,然后查找{{1 ne-line或semicolon,然后重复几次这种模式。

那么,这将使用(["\r\n]*)做什么,它会看起来是否发生了0次或更多次,并且如果有多个逗号或多个逗号,则重复多次换行(请注意,如果没有,那么这不是问题,因为我使用*)。并且,替换看起来像

*

在第一个参数中我放了所有数字,而在引号中我只放了奇数,因为偶数是不存在的或引用/换行。

我使用了其中的31个,所以如果有超过15组逗号/换行符,则不会找到并替换它们 找到

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

替换

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]*)\) *;

这适用于我提供的示例以及少于15组逗号/换行的任何示例,如果我能想出更好的东西(因为这是一个非常糟糕的解决方案),我会添加它这里。