从字符串中提取值

时间:2012-11-06 21:28:58

标签: c# regex string

我从html代码中提取字符串时遇到了问题(这与regex表达式基本相同)。 这是代码:

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>";

我想在标签之间提取标题。我的问题是我不能将未知数量的字符放在正则表达式中(。* class in td class =“”name“”):

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

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

最后一次出现</span>实际上需要什么,并且仅给出最后一个标题。

修改

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

“这是一篇文章:NICE。这是一篇很棒的文章:NICE TOO。”

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

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

对于我的表达式<span>我只得到“NICE TOO”字符串,正如@urlreader所提到的,它找到了最大长度匹配的字符串。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

请记住,你必须在最后逃脱这一点。

c#中正则表达式所需的一切都是here

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