嗨,我使用下面的Regex提取控件表单
string MessageBody = String.Empty;
string filePath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath;
filePath = filePath + "WebForm8.aspx";
using (StreamReader sr = new StreamReader(filePath))
{
MessageBody = sr.ReadToEnd();
MatchCollection mLabelCollection1 = Regex.Matches(MessageBody, "(?<openingtag><asp:Label.*?>)(?<content>.*?)(?<closingtag><.*?/asp:Label>)", RegexOptions.Singleline);
}这很好,但我需要提取表单上的标签,并排除其他外部控件中的标签,比如Gridview和all。
这是我的aspx部分
<asp:Label ID="lbl" runat="server"></asp:Label>
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblGrid" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>我需要排除regex中的Gridview标签。
根据Alex答案进行更新

<asp:Label ID="lbl" runat="server"></asp:Label>
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblGrid" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>从上面的设计中,我只需要提取直接放置的标签,并且需要从Gridview或任何外部控件中排除标签,regex之后的示例输出应该是<asp:Label ID="lbl" runat="server"></asp:Label>。
发布于 2013-12-02 11:30:26
解决方案
(?<unwanted><asp:GridView .*?>.*?(?<openingtag><asp:Label.*?>)(?<content>.*?)(?<closingtag></asp:Label>).*?</asp:GridView>)|(?<wanted>(?<openingtag><asp:Label.*?>)(?<content>.*?)(?<closingtag></asp:Label>))使用命名捕获组wanted查找要查找的标签。
讨论
在当前情况下,xml解析器将更适合。如果您发现其他标签(如GridView )会带来不想要的标签,您可以像这样自定义模式。
string[] unwantedTags = {"GridView", "MyOtherTag", "AnotherUnwantedTag"};<br>
string unwantedTagsPattern = "(?:" + String.Join("|",unwantedTags) + ")";
string pattern = "(?<unwanted><asp:" + unwantedTagsPattern + ".*?>.*?(?<openingtag><asp:Label.*?>)(?<content>.*?)(?<closingtag></asp:Label>).*?</asp:" + unwantedTagsPattern + ">)|(?<wanted>(?<openingtag><asp:Label.*?>)(?<content>.*?)(?<closingtag></asp:Label>))"https://stackoverflow.com/questions/20324544
复制相似问题