我有这个HTML代码:
<td class="Class 1">Example</td><td class="Class2">Other Example</td>
我试图在VB.NET中使用正则表达式来提取“示例”和“其他示例”
Dim parsedtext As MatchCollection = Regex.Matches(htmlcode, ">(.+)<)
(htmlcode变量包含上面提到的html代码作为字符串。)
然而,看着
parsedtext(0).Groups(0)
它返回“>Example</td><td class="Class2">Other Example<"
。我不明白为什么会发生这种情况,我已经尝试了很多其他模式字符串,无法解决这个问题。如何在两个特定字符之间提取所有文本,例如&gt;和&lt;在上面的例子中?
答案 0 :(得分:1)
我同意@ColeJohnson(此时不允许其他人相信),但这是教导贪婪与非贪婪匹配概念的一个很好的例子。
默认情况下,正则表达式量词(+
,*
,?
)尽可能地“吃掉”,而只有少量少部分比赛失败。这叫做贪心匹配。要使非 -greedy,您使用非贪婪量词:+?
,*?
,??
。
即,
">(.+?)<"
换句话说,在找到.+
之前,您的<
继续匹配尽可能多的字符;所以你看,你的输出是预期的。但是,如果假设它 找不到最后<
,则回溯到最后一次“看到”<