大家好我使用以下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
和所有
这是我的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>
我需要在我的正则表达式中排除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或任何外部控件中排除标签,正则表达式后的样本输出应该是<asp:Label ID="lbl" runat="server"></asp:Label>
答案 0 :(得分:1)
(?<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>))"