如何交换“=”运算符两侧的表达式?
例如我有:
a.Text = b.ID;
我需要一个 Regx 来换边:
b.ID = a.Text;
我想
在 C#中 Visual Studio 的替换窗口中使用正则表达式
如何交换“=”运算符两侧的表达式?
例如我有:
a.Text = b.ID;
我需要一个 Regx 来换边:
b.ID = a.Text;
我想
在 C#中 Visual Studio 的替换窗口中使用正则表达式
在 Visual Studio 的“文件中替换”对话框中,([^= ]*) = ([^= ]*);在“查找内容”文本框和$2 = $1;“替换为”对话框中输入。例如,在 Visual Studio 2012 中:

在 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。
这是一个想法:
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);
}
}
请注意,这会保留每边的空间=以及末尾的分号 - 但它也确实需要这些东西。基本上,您的代码需要做的不仅仅是“在 = 之前和之后切换文本。
使用带括号的组,例如:
string input = "a.Text = b.ID;";
Regex regex = new Regex("([^=]*)[=]([^=]*);");
regex.Replace(input, "$2 = $1;");