Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将正则表达式结果传递给函数_C# - Fatal编程技术网

C# 将正则表达式结果传递给函数

C# 将正则表达式结果传递给函数,c#,C#,我试图在运行时根据一组大括号中的内容替换字符串中的值 // this.LinkUrl = "/accounts/{accountId}" this.LinkUrl = Regex.Replace(account.Company.LinkUrl, @"\{(.*?)\}", "$1"); // this.LinkUrl = "/accounts/accountId" 到目前为止,它按预期工作,并删除了大括号。但是我如何将$1值传递到函数中,就像这样 this.LinkUrl = Regex.Re

我试图在运行时根据一组大括号中的内容替换字符串中的值

// 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”将替换为函数返回的值?e、 g.“/accounts/56”

模式中的
1st
Regex组将是所需的
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));
}

模式中的
1st
Regex组将是所需的
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));
}

您可以将委托传递给
Regex.Replace
方法,该方法接受
匹配并返回字符串,例如定义替换函数:

string GetValueForFieldNamed(Match m){
    string res = m.Groups[1].Value;
    //do stuff with res
    return res;
}
然后这样称呼它:

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

您可以将委托传递给
Regex.Replace
方法,该方法接受
匹配并返回字符串,例如定义替换函数:

string GetValueForFieldNamed(Match m){
    string res = m.Groups[1].Value;
    //do stuff with res
    return res;
}
然后这样称呼它:

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

虽然我没有指定它可以包含多个{values},但这个答案适用于单个解决方案。所以谢谢你。虽然我没有指定它可以包含多个{values},但是这个答案对于一个解决方案是有效的。所以谢谢你。太好了,我不得不从
m.Groups[1].Value中删除{}。除此之外,它工作得很好。这有点奇怪,因为它在我的机器上工作得很好。您使用的是相同的正则表达式吗?如果我调用
Regex.Replace(“/accounts/{accountId}”,@“{(.*?\”),getValueForFieldName)
,那么在
getValueForFieldName
中,我有
m.Groups[0]。Value=“{accountId}”
,但是
m.Groups[1]。Value==“accountId”
。这是我的错误,我使用了索引0而不是1。出于好奇,为什么它会给出两个结果?Match中的Groups对象总是至少有一个元素。如果匹配成功,则它包含索引0处的整个匹配表达式以及索引更高的其他组(如果有)。如果没有成功,那么它只在索引0处包含一个空字符串。更多关于.Excellent的内容,必须从
m.Groups[1].Value中删除{},但除此之外,它工作得很好。这有点奇怪,因为它在我的机器上工作得很好。您使用的是相同的正则表达式吗?如果我调用
Regex.Replace(“/accounts/{accountId}”,@“{(.*?\”),getValueForFieldName)
,那么在
getValueForFieldName
中,我有
m.Groups[0]。Value=“{accountId}”
,但是
m.Groups[1]。Value==“accountId”
。这是我的错误,我使用了索引0而不是1。出于好奇,为什么它会给出两个结果?Match中的Groups对象总是至少有一个元素。如果匹配成功,则它包含索引0处的整个匹配表达式以及索引更高的其他组(如果有)。如果没有成功,那么它只在索引0处包含一个空字符串。更多信息请访问。