首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用regex排除某些模式?

问如何使用regex排除某些模式?
EN

Stack Overflow用户
提问于 2013-12-02 09:12:30
回答 1查看 164关注 0票数 0

嗨,我使用下面的Regex提取控件表单

代码语言:javascript
复制
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部分

代码语言:javascript
复制
<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答案进行更新

​

代码语言:javascript
复制
<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>。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-02 11:30:26

解决方案

代码语言:javascript
复制
(?<unwanted><asp:GridView .*?>.*?(?<openingtag><asp:Label.*?>)(?<content>.*?)(?<closingtag></asp:Label>).*?</asp:GridView>)|(?<wanted>(?<openingtag><asp:Label.*?>)(?<content>.*?)(?<closingtag></asp:Label>))

使用命名捕获组wanted查找要查找的标签。

讨论

在当前情况下,xml解析器将更适合。如果您发现其他标签(如GridView )会带来不想要的标签,您可以像这样自定义模式。

代码语言:javascript
复制
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>))"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20324544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档