C# - 交换'='运算符的2个边

时间:2012-09-07 06:14:04

标签: regex visual-studio text-editor

如何交换'='运算符两侧的表达式?

例如我有:

a.Text = b.ID;

我需要一个Regx来改变方面:

b.ID = a.Text;

我想在 Visual Studio的替换窗口中使用regx 在C#

4 个答案:

答案 0 :(得分:5)

在C#中,您可以使用以下代码执行此操作:

var text = "a.Text = b.ID;";
var regex = new Regex(@"^(?<left>[^=\s]+)\s*=\s*(?<right>[^;]+);$");
var match = regex.Match(text);
if (match.Success) {
  var newText = String.Format(
    "{0} = {1};", match.Groups["right"].Value, match.Groups["left"].Value);
}

正则表达式的细分:

  • ^:在字符串开头
  • 处锚定匹配项
  • (?<left>[^=\s]+):匹配至少一个不是=或空格的字符。将其捕获到名为left的小组。
  • \s*=\s*:匹配=可选地由空格包围。
  • (?<right>[^;]+):匹配至少一个非;的字符。将其捕获到名为right的小组。
  • ;:匹配;
  • $:将匹配锚定到字符串的末尾。

如果要在Visual Studio编辑器中执行类似的替换,则需要在快速替换对话框中使用以下值:

  • 查找内容{[^=:b]+}:b*=:b*{[^;]+}
  • 替换为\2 = \1
  • 使用:正则表达式

主要区别在于,组由括号定义,而不是括号,空白字符组由:b表示,而不是\s

答案 1 :(得分:5)

在Visual Studio“替换文件”对话框中,在“查找内容”文本框中输入([^= ]*) = ([^= ]*);,在“替换为”对话框中输入$2 = $1;。例如,在Visual Studio 2012中:

enter image description here

答案 2 :(得分:3)

这是 的想法:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        var regex = new Regex("([^=]*) = ([^;]*);");
        string input = "a.Text = b.ID;";
        string output = regex.Replace(input, "$2 = $1;");
        Console.WriteLine(output);
    }
}

请注意,这样可以保留=每一侧的空间以及末尾的分号 - 但它也 这些内容。基本上,您的代码需要做的不仅仅是&#34;在=&#34;之前和之后切换文本。

答案 3 :(得分:2)

使用带括号的组,例如:

string input = "a.Text = b.ID;";
Regex regex = new Regex("([^=]*)[=]([^=]*);");
regex.Replace(input, "$2 = $1;");