我从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所提到的,它找到了最大长度匹配的字符串。
答案 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