我正在使用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")
答案 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组逗号/换行的任何示例,如果我能想出更好的东西(因为这是一个非常糟糕的解决方案),我会添加它这里。