正则表达式匹配代码文件中的字符串

时间:2015-03-01 00:37:04

标签: c# regex

我的解决方案中有成千上万的代码文件,我试图在这些文件中找到所有'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匹配到接近文件的末尾。

2 个答案:

答案 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+)