Visual Studio:使用正则表达式替换查找/替换
我使用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")
首先,我要澄清,这并未” 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组逗号/换行的任何示例,如果我能想出更好的东西(因为这是一个非常糟糕的解决方案),我会在此处添加它。
请注意,这会慢得多,你添加的捕获组越多,它就会越慢。 –
我会写一个控制台应用程序,它会做与正则表达式相同的尝试使用有限的VS正则表达式。 – OmegaMan
@OmegaMan最终会做什么,我正在探索几种可能性,并对这个问题感到好奇。谢谢 –
我喜欢正则表达式,不要误解我的意思;只是多行交叉难以在正则表达式中处理(通常由负面预测使用),但对模式的VS解释几乎不可能。 :-)问问并且确保你的帖子非常好。 – OmegaMan