我有这样一个网址的一部分:
/home/{value1}/something/{anotherValue}
现在我想用括号数组中的值替换括号之间的所有内容。
我尝试了这个RegEx模式:\{[a-zA-Z_]\}
但它不起作用。
稍后(在C#中)我想用数组的第一个值替换第一个匹配,用第二个替换第二个匹配。
更新:/不能用来分开。只应替换占位符{...}。
示例:/ home / before {value1} /和/ {anotherValue}
字符串数组:{“Tag”,“1”}
结果:/ home / beforeTag /和/ 1
我希望它可以这样工作:
string input = @"/home/before{value1}/and/{anotherValue}";
string pattern = @"\{[a-zA-Z_]\}";
string[] values = {"Tag", "1"};
MatchCollection mc = Regex.Match(input, pattern);
for(int i, ...)
{
mc.Replace(values[i];
}
string result = mc.GetResult;
编辑: 谢谢Devendra D. Chavan和ipr101,
两种解决方案都很棒!
答案 0 :(得分:3)
您可以尝试使用此代码片段
// Begin with '{' followed by any number of word like characters and then end with '}'
var pattern = @"{\w*}";
var regex = new Regex(pattern);
var replacementArray = new [] {"abc", "cde", "def"};
var sourceString = @"/home/{value1}/something/{anotherValue}";
var matchCollection = regex.Matches(sourceString);
for (int i = 0; i < matchCollection.Count && i < replacementArray.Length; i++)
{
sourceString = sourceString.Replace(matchCollection[i].Value, replacementArray[i]);
}
答案 1 :(得分:2)
[a-zA-Z_]
描述了一个字符类。对于文字,您最后必须添加*
(a-zA-Z_
中的任意数量的字符。
然后,要捕获“value1”,您需要添加数字支持:[a-zA-Z0-9_]*
,可以使用以下内容进行汇总:\w*
所以试试这个:{\w*}
但是为了替换C#,像Fredrik提议的那样,string.Split('/')可能会更容易。 Have a look at this too
答案 2 :(得分:1)
您可以使用委托,类似这样 -
string[] strings = {"dog", "cat"};
int counter = -1;
string input = @"/home/{value1}/something/{anotherValue}";
Regex reg = new Regex(@"\{([a-zA-Z0-9]*)\}");
string result = reg.Replace(input, delegate(Match m) {
counter++;
return "{" + strings[counter] + "}";
});
答案 3 :(得分:0)
我的两分钱:
// input string
string txt = "/home/{value1}/something/{anotherValue}";
// template replacements
string[] str_array = { "one", "two" };
// regex to match a template
Regex regex = new Regex("{[^}]*}");
// replace the first template occurrence for each element in array
foreach (string s in str_array)
{
txt = regex.Replace(txt, s, 1);
}
Console.Write(txt);