使用变量

时间:2017-06-30 19:47:58

标签: c# regex

我最熟悉PowerShell,最近又开始使用C#作为我的主要语言。在PowerShell中,可以执行以下操作

$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.

1 个答案:

答案 0 :(得分:1)

你似乎在最后一个例子中说得对,所以也许问题是你期待一个bool结果而不是Match结果?

希望这个小例子有所帮助:

int a = 123;
string b = "abc";
string toMatch = "123 and abc";

var result = Regex.Match(toMatch, $"{a}.*{b}");

if (result.Success)
{
    Console.WriteLine("Found a match!");
}