如何交换“=”运算符两侧的表达式?
例如我有:
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;");