2

動的に構築できる文字列の例を次に示します。

{Static String} <a href="{Dynamic Value}"><b>{Dynamic Value 2}</b></a>

example of static text <a href="http://www.exampleurl.com">example value</a>

{Dynamic Value 2}またはサンプル値を見つけるためにC#で正規表現を使用するにはどうすればよいですか?

4

4 に答える 4

0

オプション 1: 生の解析。推奨されません。

{Static String} <a href="{Dynamic Value}"><b>{Dynamic Value 2}</b></a>

次のようなものでよく解析されます

Regex parser = new Regex(
 @"*?\<a href\=\""(?<value1>[^\""]*)\""\>\<b\>(?<value2>[^\<]*)\<\/b\>\<\/a\>");

オプション 2: XML 解析。おすすめされた。

XElement el = XElement.Parse("<a>your long html string to parse</a>").Element("a");
string v1 = el.Attribute("href").Value;
string v2 = el.Element("b").Value;
于 2012-09-03T12:03:09.560 に答える
0

stackoverflow の人々は、html を解析してそこから値を抽出するためにhttp://htmlagilitypack.codeplex.com/を提案しているようです。正規表現を使用するよりも耐障害性があります。正規表現を使用している場合、検索する文字列で何かが変更された場合、正規表現を変更する必要があります。

于 2012-09-03T12:05:19.200 に答える
0

次のようなものを使用します。

using System.Text.RegularExpressions;

private string ExtractString(string sourceString)
{
    // (?<=string) is positive look-behind where you search for string before the match.
    // .* is all characters in between.
    // (?=string) is positive look-ahead where you search for string after the match.
    string pattern = "(?<=<a.*?>).*(?=</a)";
    Match match = Regex.Match(sourceString, pattern);
    return match.Value;
}

もちろん、ある種の例外処理メカニズムを実装する必要があります。

これが返されることに注意してください

<b>{Dynamic Value 2}</b>

解析する場合

<a href="{Dynamic Value}"><b>{Dynamic Value 2}</b></a>

必要に応じて、他の正規表現パターンを使用して文字列をさらに処理できます。

于 2012-09-03T11:52:18.340 に答える
0

これを試してみてください。希望する結果が得られます。

string Actualstring = "{static string}<a href='{Dynamic Value}'><b>{Dynamic Value 2}</b></a>"  string prevSplitBy = {static string};string desiredstring="";
     string FirstSplitBy = "<b>";
                    string SecondSplitBy = "</b>";
                    Regex regexprevSplit = new Regex(prevSplitBy );Regex regexFirstSplit = new Regex(FirstSplitBy);
                    Regex regexSecondSplit = new Regex(SecondSplitBy);
                  string[] StringprevSplit = regexprevSplit.Split(Actualstring );string[] StringFirstSplit = regexFirstSplit.Split(StringprevSplit[1] );
                    string[] StringSecondSplit = regexSecondSplit.Split(StringFirstSplit[1]); if(StringSecondSplit!=null){ for(int i=0 ; i <StringSecondSplit.count-1;i++)desiredstring=desiredstring+StringSecondSplit[i] }

desiredstring希望の文字列になります。

于 2012-09-03T11:57:14.580 に答える