如何交换'='运算符两侧的表达式?
例如我有:
a.Text = b.ID;
我需要一个Regx来改变方面:
b.ID = a.Text;
我想在 Visual Studio的替换窗口中使用regx 在C#
答案 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中:
答案 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;");