使用Match和Regex

Dav*_*een 5 c# regex

我正在研究一个解析传入文本文件的项目。我正在学习C#。我当前用于挑选所需信息的方法如下:

string MyMatchString = @"a pattern to match";
Match MyMatch = Regex.Match(somestringinput, MyMatchString);
if (MyMatch.Succes)
{
   DoSomething(MyMatch.Value);
}
Run Code Online (Sandbox Code Playgroud)

我正在做很多事情。我希望能够将比赛和测试成功结合在一起。浏览类列表,Regex有一个IsMatch()方法,但是看来我不能访问匹配的值(假设它成功了)。我想我需要一个Match实例。我试过了

if ((Match MyMatch = Regex.Match(somestringinput, MyMatchString).Success)
Run Code Online (Sandbox Code Playgroud)

但是当然有一个编译错误。

我在考虑采用匹配模式然后输入然后返回布尔值的静态方法。然后,我可以测试是否成功,如果可以,则获取匹配的值。

Mat*_*ton 3

那么你可以为正则表达式编写一个扩展方法,这会给你一些力量。诀窍是在不运行正则表达式匹配两次的情况下完成此操作,这可能会对您的性能产​​生问题(注意:这尚未经过测试,并且它与您的想法不同,因为它需要现成的正则表达式对象才能工作)。

public static class RegexExtensions {
    public static bool GetMatch(this Regex regex, string input, out string matched) {
        Match match = regex.Match(input);
        if (match.Success) {
            matched = match.Value;
            return true;
        }
        matched = null;
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你会做类似的事情

string matched;
Regex regex = new Regex(pattern);
if (regex.GetMatch(inputstring, matched))
{ /* do something with 'matched' */ }
else
{ /* no match, 'matched' is null */ }
Run Code Online (Sandbox Code Playgroud)

您可能更愿意在失败情况下返回 null,否则返回字符串,并省去布尔值和输出参数。