我在字符串流中有这些字符串:
"do=whoposted&t=1934067" rel=nofollow>61</A></TD><TD class=alt2 align=middle>5,286</TD></TR><TR><TD id=td_threadstatusicon_1911046 class=alt1><IMG id=thread_statusicon_1911046 border=0 alt="" src="http://url.com/forum/images/statusicon/thread_new.gif"> </TD><TD class=alt2><IMG title=Film border=0 alt=Film src="http://url.com/forum/images/icons/new.png"></TD><TD id=td_threadtitle_1911046 class=alt1 title="http://lulzimg.com/i14/7bd11b.jpg Complete name : cool-thread.."><DIV><A id=thread_gotonew_1911046 href="http://url.com/forum/f80/cool-topic-new/"><IMG class=inlineimg title="Go to first new post" border=0 alt="Go to first new post" src="http://url.com/forum/images/buttons/firstnew.gif"></A> [MULTI] <A style="FONT-WEIGHT: bold" id=thread_title_1911046 href="http://url.com/forum/f80/cool-topic-name-1911046/">Cool Topic Name</A> </DIV><DIV class=smallfont><SPAN style="CURSOR: pointer" onclick="window.open('http://url.com/forum/members/u2031889/', '_self')">m3no</SPAN> </DIV></TD><TD class=alt2 title="Replies: 11, Views: 1,554"><DIV style="TEXT-ALIGN: right; WHITE-SPACE: nowrap" class=smallfont>Today <SPAN class=time>08:04 AM</SPAN><BR>by <A href="http://url.com/forum/members/u1131830/" rel=nofollow>karetsos</A> <A "
目前我用这个:
Regex pattern = new Regex ( "<A\\s+href=\"([^\"]*)\">([^\\x00]*?)\\s+id=thread_title_(\\S+)</A>" );
MatchCollection matches = pattern.Matches ( doc.ToString ( ) );
foreach ( Match match in matches )
{
int id = Convert.ToInt32 ( match.Groups [ 1 ].Value );
string name = match.Groups [ 3 ].Value;
string link = match.Groups [ 2 ].Value;
...
}
但它与任何东西都不匹配。
我想要提取的是:
ID:942321
,512147
。
姓名:"Visible Thread Name"
,"Cool Thread"
链接:"http://url.com/forum/f80/new-topic-name-942321"
,"http://url.com/forum/f80/cool-topic-name-512147"
关于如何修复它的任何想法?
答案 0 :(得分:1)
这将返回您所需的内容。这里不需要过于严格:
<a.+href=".*topic\-name\-(\S+)\/.+thread_title_(\S+)"
答案 1 :(得分:1)
我找到的问题清单:
默认情况下,正则表达式区分大小写(a!= A)。一种可能的解决方案是将RegexOptions.IgnoreCase作为第二个参数传递给Regex构造函数。
id=thread...
您似乎错过"
id
匹配id之后你会突然停止...你不想在第三组中匹配这个名字吗?我想你的正则表达式应该像这样结束:
id=\"thread_title_([0-9]+)\">([^<]+)</a>
哦,并且不要在href之后关闭a
标记,因为thread_title_id仍在标记内:
href=\"([^\"]*)\">
:删除最后的>
此外,删除该奇怪的[^\\x00]*?
组。什么是好事呢?
在捕获thread_title_id之后,您需要在结束>
之前忽略内容,以便忽略style=...
属性。
完整解决方案(警告,扰乱前方)。 @"..."
语法确保您不需要转义反斜杠(但您需要通过双引号转义引号)。
Regex pattern = new Regex (@"<a\s+href=""([^""]*)""\s+id=""thread_title_([0-9]+)""[^>]*>([^<]+)</a>");
BTW,为了进行调试,我使用了以下工具,我可以推荐这个工具并自动提供转义版本: