c# - 使用匹配和正则表达式

标签 c# regex

我正在从事一个解析传入文本文件的项目。我正在学习 C#。我目前挑选我需要的信息的方法是这样的:

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

我正在做很多这样的事情。我希望能够一步结合比赛和成功测试。查看类列表,Regex 有一个 IsMatch() 方法,但似乎我无法访问匹配的值(假设它成功)。我想我需要一个 Match 实例。我试过了

if ((Match MyMatch = Regex.Match(somestringinput, MyMatchString).Success)

当然有一个编译错误。

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

最佳答案

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

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;
    }
}

所以你会做类似的事情

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

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

关于c# - 使用匹配和正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263659/

相关文章:

c# - 如何使用数据绑定(bind)在 Canvas 上绘制数据点集合?

c# - 通过 WPF 发送电子邮件使应用程序关闭

Python 正则表达式匹配字符串的最后一个单词

C# 特定字符数的通配符

c++ - 无法与 boost xpressive 动态正则表达式匹配

c# - 随机化非常大的文本文件的行

c# - 对象及其子对象上的 Web API 2 : how to return JSON with camelCased property names,

c# - 这会安全地删除我的记录吗?

javascript - 用于验证逗号分隔的唯一数字列表的正则表达式

regex - R 相当于 MATLAB 正则表达式中的 'tokens' 选项