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接受 aMatch并返回字符串的方法,例如定义替换函数:

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

您的模式中的正1st则表达式组将是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 回答