RxExp匹配第一个标记

时间:2012-04-18 13:13:57

标签: c# .net regex

我正在尝试匹配第一个标记<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 个答案:

答案 0 :(得分:4)

(.*)是贪婪的(意思是“你找到最后 </test>之前你可以匹配的所有东西”),你正在寻找非贪婪的版本{{1 (意思是“只要你找到第一个 (.*?)”就可以匹配。)

在考虑使用正则表达式解析HTML时,请记住the call of Cthulu,并查看this question,以了解使用.NET解析HTML的最佳实践。或者,如果这是XML(而不是HTML),那么无论如何,使用XmlReader以适当(且简单)的方式进行。

答案 1 :(得分:1)

而不是.*使用.*?

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

答案 2 :(得分:1)

@Radu的答案非常好,但也请尝试复习以下内容:

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

答案 3 :(得分:1)

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

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

将解析与'&lt;'不同的所有字符,这是您要忽略的第一个字符。

HTH。