1

中かっこのセット内の内容に基づいて、実行時に文字列の値を置き換えようとしています。

// this.LinkUrl = "/accounts/{accountId}"
this.LinkUrl = Regex.Replace(account.Company.LinkUrl, @"\{(.*?)\}", "$1");
// this.LinkUrl = "/accounts/accountId"

これまでのところ、期待どおりに機能し、ブレースを削除します。しかし、どうすれば $1 値を関数に渡すことができますか?

this.LinkUrl = Regex.Replace(account.Company.LinkUrl, @"\{(.*?)\}", this.GetValueForFieldNamed("$1"));

「accountid」は関数が返す値に置き換えられますか? 例: "/accounts/56"

4

2 に答える 2

3

Regex.Replaceを取り、文字列を返すメソッドにデリゲートを渡すことができMatchます。たとえば、置換する関数を定義します。

string GetValueForFieldNamed(Match m){
    string res = m.Groups[1].Value;
    //do stuff with res
    return res;
}

そしてそれをこのように呼びます:

LinkUrl = Regex.Replace(account.Company.LinkUrl, @"\{(.*?)\}", GetValueForFieldNamed);
于 2012-08-07T13:14:09.250 に答える
1

パターン内の1stRegex グループがID必要になるため、最初にそれを変数に格納し、次に関数を使用して、それを戻り値にGetValueForFieldNamed()置き換えます。id

var match = Regex.Match(account.Company.LinkUrl, @"\{(.*?)\}");
if (match.Success) {
    string id = match.Groups[1].Value;
    this.LinkUrl = Regex.Replace(account.Company.LinkUrl, String.Format(@"\{({0})\}", id), this.GetValueForFieldNamed(id));
}
于 2012-08-07T13:13:36.853 に答える