正则表达式找标签

时间:2009-11-17 15:54:12

标签: c# asp.net html regex

我正在尝试查找带有id和文本的所有标签,但我的正则表达式似乎不起作用:

使用以下正则表达式:

<asp:[a-z]+.*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/>

以及以下示例文本:

<asp:Label ID="SomeID" Text="SomeText" />
<asp:Label Text="SomeText" />
<asp:Label ID="SomeID" />
<asp:Label ID="SomeOtherID" Text="Some Other Text" />

我得到以下比赛:

   1. "<asp:Label ID="SomeID" Text="SomeText" />" has 2 groups:
         1. "SomeID"
         2. "SomeText"
   2. "<asp:Label Text="SomeText" /> <asp:Label ID="SomeID" /> <asp:Label ID="SomeOtherID" Text="Some Other Text" />" has 2 groups:
         1. "SomeID"
         2. "Some Other Text"

第一个显然是正确的,但我不确定为什么会出现#2。

以下正则表达式只找到第一个标签(“SomeID”)而不是第四个标签(“SomeOtherID”):

<asp:[a-z]+ (?!.*<[a-z]).*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/>

1 个答案:

答案 0 :(得分:2)

尝试使用.*替换表达式中的[^>]*,以避免跨越HTML标记边界。问题是表达式中间的.*?/> <asp:Label ID="SomeOtherID"匹配。

也许是这样的:

<asp:[a-z]+\s*ID="(?<id>[^"]*)"\s*Text="(?<text>[^"]*)"[^/]*/>