我正在研究一个解析传入文本文件的项目。我正在学习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)
但是当然有一个编译错误。
我在考虑采用匹配模式然后输入然后返回布尔值的静态方法。然后,我可以测试是否成功,如果可以,则获取匹配的值。
那么你可以为正则表达式编写一个扩展方法,这会给你一些力量。诀窍是在不运行正则表达式匹配两次的情况下完成此操作,这可能会对您的性能产生问题(注意:这尚未经过测试,并且它与您的想法不同,因为它需要现成的正则表达式对象才能工作)。
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,否则返回字符串,并省去布尔值和输出参数。