我有一个字符串:
<a href="mailto:me@company.com">Joel Werner</a>
我需要除掉我的名字以外的所有东西
我现在的表情,差不多就是这样。
var pattern = new System.Text.RegularExpressions.Regex(">(?<name>.+?)<");
但是当我匹配他们时,我得到
>Joel Werner<
我错过了什么,因为我不太喜欢正则表达式
如果您不喜欢正则表达式,请不要在这种情况下使用它们。使用正则表达式解析 HTML 通常非常糟糕。请参阅此答案以了解原因。
使用CsQuery:
Console.WriteLine(CQ.Create("<a href=\"mailto:me@company.com\">Joel Werner</a>"). //create the selector
Attr("href"). //get the href attribute
Split(new char[]{':','@'})[1]); //split it by : and @ and take the second group (after the mailto)
使用内置 LINQ to XML:
XDocument doc = XDocument.Parse("<a href=\"mailto:me@company.com\">Joel Werner</a>");
Console.WriteLine(doc.Element("a").Attribute("href").ToString().Split(new char[] {':', '@'})[1]);
使用组来获取匹配的名称:
var name = pattern.Match(input).Groups["name"].Value;
您还可以Success
在引用组之前验证匹配:
var match = pattern.Match(input);
if (match.Success)
name = match.Groups["name"].Value;
您也可以按索引引用组Groups[1]
。
使用这个正则表达式
<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>
然后使用第二个匹配,第一个匹配是标签类型。
var input = "<a href=\"mailto:me@company.com\">Joel Werner</a>";
var pattern = new System.Text.RegularExpressions.Regex(@"<a\shref=""(?<url>.*?)"">(?<name>.*?)</a>");
var match = pattern.Match(input);
var name = match.Groups["name"].Value;