我需要一个正则表达式来帮助我在我的字符串中进行匹配。这是包含我需要的信息的行:
<td width="140" height="18"><a href="users_folders.cfm?viewfolder=86&viewsub=20207&addSub=20202" class="folderNav"><strong>087690898</strong></a></td>
我需要提取的是href "users_folders.cfm?viewfolder=86&viewsub=20207&addSub=20202"
的地址以及存储在两个强标记087690898
之间的值。所以我只需要识别看起来像这样的行。
所以我已经弄清楚了这一点:
(匹配任何字符或数字)(匹配&lt; a href =“)(匹配任何字符或数字)(匹配类=”folderNav“&gt;)
我将其创建为正则表达式:
[a-z] (&lt; a href =“)[a-z] (class =”folderNav“&gt;)
一旦我识别出这个字符串,我就可以解析它拉出我需要的值,但它识别出我遇到问题的字符串。我是正则表达式的新手,并不确定如何做到这一点。我知道正则表达式存在缺陷。我正在使用C#。
另外,我知道你不应该在HTML上使用Regex,但为此,我不介意快速而肮脏的解决方案。
答案 0 :(得分:3)
虽然纯粹主义者会因违反正则表达式/ HTML规则而谴责我永远的诅咒,但这就是你需要的:
string line = @"<td width=""140"" height=""18""><a href=""users_folders.cfm?viewfolder=86&viewsub=20207&addSub=20202"" class=""folderNav""><strong>087690898</strong></a></td>";
Match match = Regex.Match(line, @"<a href=""(?<addr>[^""]*)"" class=""folderNav""><strong>(?<val>[^<]*)</strong></a>");
string addr = match.Groups["addr"].Value;
string val = match.Groups["val"].Value;
(?<name>expression)
部分称为“named matched subexpressions”;您可以通过链接到MSDN了解更多相关信息。
在上面的代码中,我们使用命名子表达式来匹配您的地址和值。在每种情况下,除了预期的终止符之外,我们允许匹配任何字符。对于href
地址,属性值在"
之前结束;因此,我们匹配[^"]*
。在<strong>
值的情况下,元素文本在<
(结束标记)之前结束;因此,我们匹配[^<]*
。其余的正则表达式是逐字的。
答案 1 :(得分:2)
这样的事情对我有用:
<a href="(?<HREF>[^\"\ ]*)"[^\>]*><strong>(?<TEXT>.*)</strong>
Regex regexObj = new Regex("<a href=\"(?<HREF>[^\" ]*)\"[^>]*><strong>(?<TEXT>.*)</strong>", RegexOptions.IgnoreCase);
var match = regexObj.Match(subjectString);
if (match.Success)
{
string href = match.Groups["HREF"].Value;
string text = match.Groups["TEXT"].Value;
}
答案 2 :(得分:-1)
更好地解析html以使用html agility pack