我有一个字符串:
<a href="mailto:me@company.com">Joel Werner</a>
我需要除去所有东西但我的名字
我现在的表达几乎就是这样。
var pattern = new System.Text.RegularExpressions.Regex(">(?<name>.+?)<");
但是当我匹配它们时,我得到了
>Joel Werner<
我缺少什么,因为我真的不喜欢正则表达式
答案 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;