1

我有这个 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<"。我不明白为什么会这样,并且我尝试了许多其他模式字符串并且无法解决这个问题。如何提取两个特定字符之间的所有文本,例如 > 和 <上面的例子?

4

1 回答 1

1

我同意@ColeJohnson(在这一点上不允许任何人相信 SO),但这是教授贪婪与非贪婪匹配概念的一个很好的例子。

默认情况下,正则表达式量词 ( +, *, ?) 尽可能“吃掉”,并且只有在匹配的某些部分失败时才吃得更少。这叫做贪心匹配。为了使它贪婪,你使用非贪婪的量词: +?, *?, ??.

那是,

">(.+?)<"

换句话说,在找到;.+之前,您会继续匹配尽可能多的字符。<所以你看,你的输出是意料之中的。但是,如果假设它没有找到 last <,它就会回溯到它最后一次“看到” a <

于 2013-10-12T05:26:01.127 回答