3

我正在尝试匹配第一个标签中的文本内容<test>

例如:

<test>SAMPLE TEXT</test><test>SAMPLE TEXT2</test><test>SAMPLE TEXT3</test>

如果我使用

("<test>(.*)</test>")`

我懂了:

SAMPLE TEXT</test><test>SAMPLE TEXT2</test><test>SAMPLE TEXT3

如何从第一个<test>标签中获取内容:SAMPLE TEXT

4

4 回答 4

4

(.*)是贪婪的(意思是“你可以匹配的所有东西,直到你找到最后一个 </test>”),你正在寻找非贪婪的版本(.*?)(意思是“尽可能少地匹配,直到你找到第一个 </test>”)。

但是,在考虑使用正则表达式解析 HTML 时,请记住Cthulu 的调用,并查看此问题以讨论使用 .NET 解析 HTML 的最佳实践。或者,如果这是 XML(不是 HTML),那么一定要以正确(且简单)的方式使用XmlReader.

于 2012-04-18T13:14:50.813 回答
1

@Radu 的回答非常好,但也可以尝试以下评论:

"<test>([^<]*)</test>"
于 2012-04-18T13:16:52.220 回答
1

而不是.*使用.*?

问号使星号变得懒惰,使其尽可能少地匹配。没有它,星号是贪婪的,并且尽可能匹配。

于 2012-04-18T13:15:35.653 回答
1

我同意您可以使用 XML 解析库,但无论如何我都会回复:

("<test>([^<]*)</test>")

将解析与“<”不同的所有字符,这是您要忽略的第一个字符。

HTH。

于 2012-04-18T13:18:41.713 回答