1

我从 html 代码中提取字符串时遇到问题(这基本上是正则表达式的问题)。这是代码:

string wheretosearch = @"
<td class=""name"">
<div>
<a href=""/addr1.html"" class=""link "">
<span>Title1</span>
</a></td>

[some code]

<td class=""name"">
<div>
<a href=""/addr2.html"" class=""link "">
<span>Title2</span>
</a></td>";

我想提取标签之间的标题。我的问题是我不能将未知数量的字符放入正则表达式(.* td class=""name"" 之后的部分):

<td class=""name"">.*<span>(?<title>.*)</span>

简单地说:我希望正则表达式找到<td class=""name"">,然后在未知数量的字符后找到第一次出现的<span>,然后取第一个<span>和之间的值</span>

它实际上做了什么,它只需要最后一次出现<span>并给出最后一个标题。

编辑:

好的,除了 HTML 问题,问题是:我有字符串:

“这是一个文本:NICE。这是一个很棒的文本:NICE TOO。”

我想取“This”,然后是未知数量的字符,然后是“:”和“。”之间的字符串。如何做到这一点?

当然,我对那个复杂表达式的每次出现都感兴趣,所以输出将是集合中的“NICE”和“NICE TOO”。

对于我的表达式,就像"This.*(?<title>.*)."我只得到“NICE TOO”字符串一样,正如@urlreader 提到的,它找到了最大长度匹配的字符串。

4

2 回答 2

1
<td class=""name"">.*?<span>(?<title>.*)</span>

这是因为正则表达式试图找到最大长度匹配的字符串。

于 2012-11-06T21:36:47.377 回答
1

对于编辑中的问题,我会尝试类似:

This[\w|\s]*: (?<title>[\w|\s]+)\.

请记住,您必须在最后逃脱点。

您在 c# 中使用正则表达式所需的一切都在这里

一个方便的工具:http ://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

于 2013-04-10T07:03:02.627 回答