我正在使用剃刀页面,我需要从变量属性表中删除一系列自定义字段。我的目的是用htmlstring替换特定的符号配对('{}')。然而,为了简化,我想用增量号替换它。
这是我正在寻找的伪代码。
string s = "This sample will count: {}, {}, {}."
int i = 0;
while(*string not finished*)//?
{
i ++;
s.Replace("{}", i);
}
输出:
"This sample will count 1, 2, 3."
这是我需要使用正则表达式吗?还有其他想法吗?
修改
我应该澄清一下:直到运行时我才知道有多少'{}。这些数字可能会让人失望,我更喜欢做更类似的事情:
s.replace("{}", stringArray[i]);
答案 0 :(得分:3)
使用Split来标记输入字符串的简单示例;
string s = "This sample will count: {}, {}, {}.";
string[] tokens = s.Split(new[] { "{}"}, StringSplitOptions.None);
StringBuilder sb = new StringBuilder();
int counter = 1;
for (int i = 0; i < tokens.Length; i++ )
{
sb.Append(tokens[i]);
if (i < tokens.Length - 1)
sb.Append(counter++);
}
Console.WriteLine(sb.ToString());
解决您发布的示例,但我认为您的实际要求会稍微复杂一些。
答案 1 :(得分:2)
您可以使用正则表达式match evaluator,如下所示:
var re = new Regex(@"\{\}");
string s = "This sample will count: {}, {}, {}.";
string[] replacementStrings = new string[]{"r1", "r2", "r3"};
int i = 0;
string n = re.Replace(s, m =>
{
return replacementStrings[i++];
});
Console.WriteLine(n); // outputs: This sample will count: r1, r2, r3.
答案 2 :(得分:1)
如果性能对您很重要,请手动遍历字符串并将其内容写入StringBuilder
(以防止在连接和替换字符串时进行大量字符串实例创建),然后查找并替换{{1 }}。 {}
会很好用。完成后,缓存结果并通过string.IndexOf
答案 3 :(得分:0)
您可以使用普通的旧字符串操作来执行此操作:
string s = "This sample will count: {}, {}, {}.";
string[] stringArray = new[] { "1", "2", "3" };
int i = 0, c = s.IndexOf("{}");
while(c >= 0)
{
s = s.Remove(c) + stringArray[i++] + s.Substring(c + 2);
c = s.IndexOf("{}");
}
// s == "This sample will count: 1, 2, 3."
或使用正则表达式:
string s = "This sample will count: {}, {}, {}.";
string[] stringArray = new[] { "1", "2", "3" };
int i = 0;
s = Regex.Replace(s, "{}", m => stringArray[i++]);
// s == "This sample will count: 1, 2, 3."
或使用Linq:
string s = "This sample will count: {}, {}, {}.";
string[] stringArray = new[] { "1", "2", "3" };
s = String.Join("", s.Split(new[]{ "{}" }, StringSplitOptions.None)
.Select((x, i) => i < stringArray.Length ? x + stringArray[i] : x));
// s == "This sample will count: 1, 2, 3."
答案 4 :(得分:-1)
另一种解决方案:
string fmt = "This sample will count: {0}, {1}, {2}.";
int[] values = new int[3];
for (int i = 0; i < values.Length; i++) {
values[i] = i;
}
string s = string.Format(fmt, values[0], values[1], values[2]);
这对您发布的内容采用了不同的逻辑方法,可能适用于您的项目,也可能不适用。