私はPowerShellをよく知っていて、最近は主な言語としてC#を使用するようになりました。 PowerShellでは、次のことが可能です。C#変数を使った正規表現のマッチング
$var1 = "abc"
"abc" -match "$var1"
この結果、真のステートメントになります。
私はC#で同じことをすることができるようにしたいと思います。私はあなたがC#で補間を使うことができることを知っていますし、Regex.Match()を無駄なく使用しようとするさまざまな方法を試しています。
例:
string toMatch = "abc";
var result = Regex.Match("abc", $"{{toMatch}}");
var a = Regex.Match("abc", $"{{{toMatch}}}");
var b = Regex.Match("abc", $"{toMatch}");
var c = Regex.Match(toMatch,toMatch);
上記のどれも動いていないようにみえ。私がしようとしていることがC#で可能であるかどうかはわかりません。理想的には、私は一致のための変数とRegexの組み合わせを使用できるようにしたいと思います。このようなものも同じですRegex.Match(varToMatch,$"{{myVar}}\\d+\\w{4}")
編集: ここでいくつかの解答を読み、いくつかのコードを試してみたら、私の本当の問題はディレクトリパスと一致しているようです。 "C:\ temp \ abcfile"のようなものです。たとえば:
string path = @"C:\temp\abc";
string path2 = @"C:\temp\abc";
string fn = path.Split('\\').LastOrDefault();
path = Regex.Escape(path);
path2 = Regex.Escape(path2);
Regex rx = new Regex(path);
var a = Regex.Match(path.Split('\\').Last().ToString(), $"{fn}");
//Example A works if I split and match on just the file name.
var b = Regex.Match(path, $"{rx}");
//Example B does not work, even though it's a regex object.
var c = Regex.Match(path, $"{{path}}");
//Example C I've tried one, two, and three sets of parenthesis with no luck
var d = Regex.Match(path,path);
// Even a direct variable to variable match returns 0 results.
あなたのコードは正常に動作します(ただし、余分な括弧を追加しない場合のみ)。何が問題なの? – SLaks
あなたは 'Regex.Escape'が必要です。 – SLaks
二重エスケープバックスラッシュの代わりに '$ @'を使用してください。 – SLaks