在Visual Studio中反转分配方向

时间:2009-06-18 14:04:53

标签: visual-studio regex

我在Visual Studio中有一堆赋值操作,我想要反转它们: 即

i = j;
会变成

j = i;

即。将等于之前的所有内容替换为等于之后的内容,反之亦然

有没有简单的方法可以做到这一点,在正则表达式引擎中说些什么?

干杯,艾德

9 个答案:

答案 0 :(得分:31)

选择要交换的行,Ctrl + H,然后替换:

{:i}:b*=:b*{:i};

使用:

\2 = \1;

将“Look in:”设置为“Selection”

它只处理C / C ++样式标识符(通过“:i”)。将其替换为:

{.*}:b*=:b*{.*};

替换“=”两侧的任何内容。

此外,由于您在评论中提到使用ReSharper,因此您只需突出显示“=”,Alt + Enter和“反向分配”。

答案 1 :(得分:15)

对克里斯的回答略有改善......

Ctrl + H,然后替换:

{:b*}{[^:b]*}:b*=:b*{[^:b]*}:b*;

使用:

\1\3 = \2;

(更好地处理空格,尤其是在行首)

修改  对于Visual Studio 2012及更高版本(我在2015年尝试过): 取代

(\s*)([^\s]+)\s*=\s*([^\s]+)\s*;

使用:

$1$3 = $2;

答案 2 :(得分:2)

执行此操作的有效方法是使用重构工具。他们知道语言的语法,所以他们理解“赋值语句”的概念,并且可以在赋值运算符的任何一侧正确选择整个表达式,而不是局限于单个标识符,这就是我认为所有正则表达式到目前为止已经涵盖。重构工具将您的代码视为结构化代码而不仅仅是文本。我发现提到了两个可以执行此操作的Visual Studio加载项:

(反转赋值不是技术上的重构,因为它改变了程序的行为,但大多数重构工具扩展了含义,包括其他类似的通用代码修改。)

答案 3 :(得分:1)

如何替换所有(CTRL-H)

你可以替换例如“i = j;”通过“j = i;”

您可以在该对话框中使用正则表达式。我不太确定你应该如何弹出对他们的帮助。在该对话框中,按F1,然后搜索该页面以获取有关正则表达式的更多信息。

我喜欢这个对话框,因为它允许您完成每个替换。因为破坏事物的机会很高,我认为这是一个更安全的解决方案

答案 4 :(得分:1)

不幸的是我没有Visual Studio,所以我无法在目标环境中尝试,但如果它使用标准的regexp,你可能会这样做: 搜索“(:Al) = (:Al);”,并替换为“\2 = \1”。 (\ 1和\ 2是对第一个和第二个捕获组的引用,在这种情况下是\ w:s周围的括号)

修改
好吧,不是\ ...但是根据MSDN,我们可以使用:Al。上面编辑使用它。
此外,从MSDN页面我收集它应该工作,因为引用似乎正常工作。

答案 5 :(得分:1)

请参阅此问题:Is there a method to swap the left and right hand sides of a set of expressions in Visual Studio?

我对该问题的回答有一个宏,您可以用它来交换代码块的分配。

答案 6 :(得分:1)

我的表情略有改善。

替换

(\t+)(\s*)(\S*) = (\S*);

$1$2$4 = $3;

原因是,它会查找以tab(\ t)开头的行。它将跳过从定义开始的行。 E.g:

        TestClass tc = new TestClass();
        int a = 75;
        int b = 76;
        int c = 77;

        a = tc.a;
        b = tc.b;
        a = tc.c;

忽略int a,int b和int c并仅交换赋值。

答案 7 :(得分:1)

在选择代码块后的Visual Studio 2015+中按Ctrl + H

查找:(\w+.\w+) = (\w+);

替换:$2 = $1;

例如:

entity.CreateDate = CreateDate;

更改为:

CreateDate = entity.CreateDate;

答案 8 :(得分:0)

您可以在Visual Studio中使用正则表达式进行搜索和替换,但只是进行常规搜索并替换您想要更改的每个作业而不是批量更改会更安全。