0

私は文字列を持っています:

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

そして私は自分の名前以外のすべてを取り除く必要があります

私が今持っている表現は、ほとんどそうです。

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

しかし、それらを一致させると、

>Joel Werner<

正規表現があまり好きではないので、何が欠けていますか

4

4 に答える 4

1

グループを使用して一致する名前を取得します。

var name = pattern.Match(input).Groups["name"].Value;

Successグループを参照する前に一致を確認することもできます。

var match = pattern.Match(input);
if (match.Success)
    name = match.Groups["name"].Value;

group by index を参照することもできますGroups[1]

于 2013-02-04T19:13:54.960 に答える
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 に答える
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 に答える
0

この正規表現を使用

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

次に 2 番目の一致を使用します。最初の一致はタグ タイプです。

于 2013-02-04T19:14:25.453 に答える