我的解决方案中有成千上万的代码文件,我试图在这些文件中找到所有'Resource.X'引用。
例如,其中一个代码文件的一部分是
<div class="col-md-offset-9">
<button type="button" class="btn btn-primary" data-dismiss="modal" id="btnAddEnvironmentRole">@Resources.ES_Save</button>
<button type="button" class="btn btn-default" data-dismiss="modal" id="btnCancelAddEnvironmentRole">@Resources.ES_Cancel</button>
</div>
我需要匹配
“Resources.ES_Save”和“Resources.ES_Cancel”
有成千上万的代码文件和数千种Resources.X变种,但它们都以“资源”开头。
我很接近
\ bResources .. * [A-Z] \ B'/ P>
但是这与第一个Resources.Save匹配到接近文件的末尾。
答案 0 :(得分:0)
您不应该将Regex用于HTML。关于你可以阅读的内容很多。而不是你应该使用HTML Parser。您可以使用HTML Agility Pack执行此操作。
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);//html is string
var coll = doc.DocumentNode.Descendants().Where(x => x.Name == "button" && x.Attribute["id"] != null && (x.Attribute["id"].Value == "btnAddEnvironmentRole" || x.Attribute["id"].Value == "btnCancelAddEnvironmentRole")).ToList();
foreach(HtmlNode node in coll)
{
string text = node.InnerText // this will return the text in the node
}
你可以google HTML Agility Pack,dll也在NuGet中。
答案 1 :(得分:0)
Jason,我同意@mybirthname,在尝试提取HTML时,HTML Agility Pack是一种方法,而不是正则表达式,但在这种情况下,我们只是在寻找一段剃刀代码,所以正则表达式是有意义的我。假设你真的想找到“Resources.ES_Save”和“Resources.ES_Cancel”,这应该足够了:
(?<Resource>@Resources\.ES_(?:Save|Cancel))
命名捕获也将使其更容易访问。如果您需要匹配所有资源,您可以这样做:
(?<Resource>@Resources\.\w+)