0

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

例如我有:

a.Text = b.ID;

我需要一个 Regx 来换边:

b.ID = a.Text;

我想 在 C#中 Visual Studio 的替换窗口中使用正则表达式

4

4 回答 4

6

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

在此处输入图像描述

于 2012-09-07T06:35:29.260 回答
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, not表示\s

于 2012-09-07T06:19:41.337 回答
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);
    }
}

请注意,这会保留每边的空间=以及末尾的分号 - 但它也确实需要这些东西。基本上,您的代码需要做的不仅仅是“在 = 之前和之后切换文本。

于 2012-09-07T06:19:55.447 回答
2

使用带括号的组,例如:

string input = "a.Text = b.ID;";
Regex regex = new Regex("([^=]*)[=]([^=]*);");
regex.Replace(input, "$2 = $1;");
于 2012-09-07T06:17:20.277 回答