'='演算子のいずれかの側で式を交換するにはどうすればよいですか?
たとえば、私は持っています:
a.Text = b.ID;
サイドを変更するには正規表現が必要です:
b.ID = a.Text;
C#のVisualStudioの置換ウィンドウで正規表現を使用したい
'='演算子のいずれかの側で式を交換するにはどうすればよいですか?
たとえば、私は持っています:
a.Text = b.ID;
サイドを変更するには正規表現が必要です:
b.ID = a.Text;
C#のVisualStudioの置換ウィンドウで正規表現を使用したい
Visual Studioの[ファイルに置換]ダイアログで、[([^= ]*) = ([^= ]*);
検索する文字列]テキストボックスと[置換]ダイアログに入力します$2 = $1;
。たとえば、VisualStudio2012では次のようになります。
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]+)
=
:空白または空白ではない文字を少なくとも1つ一致させます。。という名前のグループにキャプチャしleft
ます。\s*=\s*
=
:オプションで空白で囲まれた一致。(?<right>[^;]+)
:ではない文字を少なくとも1つ一致させ;
ます。。という名前のグループにキャプチャしright
ます。;
:一致し;
ます。$
:文字列の最後に一致を固定します。Visual Studioエディターで同様の置換を実行する場合は、[クイック置換]ダイアログボックスで次の値を使用する必要があります。
{[^=:b]+}:b*=:b*{[^;]+}
\2 = \1
主な違いは、グループは括弧ではなく角かっこで定義され、空白文字グループはでは:b
なく、で表されること\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;");