0

我有一个字符串:

<a href="mailto:me@company.com">Joel Werner</a>

我需要除掉我的名字以外的所有东西

我现在的表情,差不多就是这样。

var pattern = new System.Text.RegularExpressions.Regex(">(?<name>.+?)<");

但是当我匹配他们时,我得到

>Joel Werner<

我错过了什么,因为我不太喜欢正则表达式

4

4 回答 4

1

如果您不喜欢正则表达式,请不要在这种情况下使用它们。使用正则表达式解析 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]);
于 2013-02-04T19:16:26.380 回答
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]

于 2013-02-04T19:13:54.960 回答
0

使用这个正则表达式

<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>

然后使用第二个匹配,第一个匹配是标签类型。

于 2013-02-04T19:14:25.453 回答
0
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;
于 2013-02-04T20:26:56.567 回答