Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式从字符串中提取字符串_C#_Regex - Fatal编程技术网

C# 使用正则表达式从字符串中提取字符串

C# 使用正则表达式从字符串中提取字符串,c#,regex,C#,Regex,我想从视图页面中提取母版页值指令。考虑到非常大的aspx页面和非常小的页面,我希望以最快的方式做到这一点 我认为最好的方法是分两个阶段进行: 从视图中提取页面指令部分(使用正则表达式): 然后,提取MasterPageFile属性中的值 结果需要是:~/Views/Shared/Site.Master 我可以从某人那里得到帮助来实现这一点吗?我非常想只使用正则表达式,但我不是正则表达式专家 另一件事,你认为正则表达式是实现这一点的最快方法吗?这里有一个正则表达式,它与Page指令匹配,并且在组

我想从视图页面中提取
母版页
值指令。考虑到非常大的
aspx
页面和非常小的页面,我希望以最快的方式做到这一点

我认为最好的方法是分两个阶段进行:

  • 从视图中提取页面指令部分(使用正则表达式):

  • 然后,提取
    MasterPageFile
    属性中的值

  • 结果需要是:
    ~/Views/Shared/Site.Master

    我可以从某人那里得到帮助来实现这一点吗?我非常想只使用正则表达式,但我不是正则表达式专家


    另一件事,你认为正则表达式是实现这一点的最快方法吗?

    这里有一个正则表达式,它与Page指令匹配,并且在组1中具有MasterPageFile属性的值:

    <%@\s?Page.*?MasterPageFile="([^"]+)".*?%>$
    
    字符串a=”“;
    
    Regex r=new Regex(“我正在构建一个自动化的测试代码,测试很多视图页面。你认为这是最快的方法吗?在一个非常大的aspx文件中,Regex可能会扫描所有页面,或者它是优化为只查找第一个匹配的案例(在本例中是page指令块)。谢谢!如果.aspx非常大,您可能只需要读取前n行,然后在该行上运行正则表达式。这样,您只有很少的数据可供正则表达式操作,并且加载页面的时间也会减少。磁盘IO往往比CPU慢:-)Regex.Match方法将返回第一个匹配项,然后停止搜索。对,但它需要在
    %>
    之后停止搜索(页面指令的末尾)即使找不到
    MasterPageFile
    属性,我发布的正则表达式也不会匹配任何不在页面指令中的内容。搜索需要在页面指令结束后停止。
        string a = "<%@ Page Language=\"C#\" MasterPageFile=\"~/Views/Shared/Site.Master\" Inherits=\"System.Web.Mvc.ViewPage\" %>";
    
        Regex r = new Regex("<%@.*MasterPageFile=\"([^\"]*)\".*%>", RegexOptions.Compiled);
        Match m = r.Match(a);
        if (m.Success)
        {
           // what you want is in m.Groups[1]
        }