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