我正在使用visual studio的查找/替换工具来查找使用正则表达式的内容,并进行替换。我在“查找:Assert.IsTrue\(([^,;]*)\) *;
和替换Assert.IsTrue($1, "$1");
”中找到了这一点,因此它所做的是查找括号中除了逗号,
和分号;
之外的任何内容的每个Assert.IsTrue();
,然后在引号和逗号,
之后添加括号中的任何内容。所以,如果我有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和引号,所以替换后的结果是
Assert.IsTrue("wtv" == "wtv", "wtv == wtv")
和
Assert.IsTrue(wtv ||
wtv2, "wtv ||wtv2")
发布于 2016-01-24 13:29:20
首先,我要澄清的是,这并没有真正解决问题,只是一个讨厌的工作,而不是一个真正的解决方案。我把它贴出来,以防有人像我一样需要工作(我对此表示怀疑,但很好)。然而,由于这不是真正的答案,我不会把它标记为这样(除非有人解释它不可能是一个真正的答案),新的答案总是受到欢迎的。
我所做的是,在需要regex的部分中添加几个组,([^,;"\r\n]*)
首先查找不是逗号、分号、引号或新行的任何内容,然后查找(["\r\n]*)
新行或分号,然后重复这个模式几次。
所以,当它使用*
时,它会看到它是否发生了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组逗号/新行的例子,如果我能想出更好的解决方案(因为这是一个非常糟糕的解决方案),我将在这里添加它。
https://stackoverflow.com/questions/34957070
复制