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