似乎无法得到这个正则表达式

时间:2013-02-04 19:11:38

标签: c# asp.net regex

我有一个字符串:

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

我需要除去所有东西但我的名字

我现在的表达几乎就是这样。

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

但是当我匹配它们时,我得到了

>Joel Werner<

我缺少什么,因为我真的不喜欢正则表达式

4 个答案:

答案 0 :(得分: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]引用分组。

答案 1 :(得分:1)

如果您不喜欢正则表达式,请不要在这种情况下使用它们。使用正则表达式解析HTML通常非常糟糕。请参阅this answer on why

使用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]);

答案 2 :(得分:0)

使用此正则表达式

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

然后使用第二场比赛,第一场比赛是标签类型。

答案 3 :(得分: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;