-2

.NET で RegEx を扱う場合、次の 2 つのオプションがあります。

  1. 文字列のパターン マッチをチェックします。

    <a ([^>]*?)href=\"http://the.site.com/photo/[0-9]*\">

  2. パターンの一部をキャプチャ:

    <a ([^>]*?)href=\"http://the.site.com/photo/(?<photoname>.*?)\">

しかし、パターンの一致を確認し、単一の RegEx と一致する場合はその部分をキャプチャしたい場合はどうすればよいでしょうか?

4

3 に答える 3

2

キャプチャするときにこれを使用してください:

<a ([^>]*?)href=\"http://the.site.com/photo/(?<photoname>[0-9]+)\">
于 2013-10-29T14:39:11.540 に答える
1

htmlAgilityPackを使用する

HtmlDocument doc = new HtmlDocument();
doc.Load(htmlUrl);

var pattern=@"^(?<=https?://the.site.com/photo/)\d+$";
var hrefList= doc.DocumentNode
                 .SelectNodes("//a[@href]")
                 .Select(p =>p.Attributes["href"].Value)//select all hrefs
                 .Where(p => Regex.IsMatch(p,pattern))//filter href
                 .Select(p=>Regex.Match(p,pattern).Value);//select required digits
于 2013-10-29T14:32:27.740 に答える
0

よかった、あなたは1つのパターンで名前付きのグループに一致してキャプチャすることができます!

<a (?:[^>]*?)href\s*?=\s*\"http://the.site.com/photo/(?<photoname>[0-9]+)\"

名前が付けられたグループphotonameには、必要なキャプチャが含まれます。

この正規表現はhref、要素の最初の属性でなくても機能しaます。また、任意のスペースも無視します。

于 2013-10-29T14:46:52.017 に答える