我知道有人問過類似的問題,但我找不到任何特別適合我需要的東西,而且我對 Regex 一無所知。
我有像這樣不同長度的句子:
在開發配方時提供 $modifier% 的最高質量獎勵和 $modifier% 的特殊特性幾率。
所以 $modifier 是我所有的占位符。我有一個浮點數串列,然后我將根據訂單相應地替換它們。
在這種情況下,我有一個串列值 {5,0.5}。被替換的字串應該以
在開發配方時提供 5% 的最大質量加成和 0.5% 的特殊特性幾率。
我想避免 string.Replace 因為文本可能會變長而且我不想在它上面回圈多次。誰能建議一個好的方法來做到這一點?
干杯和感謝 H
uj5u.com熱心網友回復:
由于字串在 CLR 中是不可變的,因此可能沒有明智的方法來拆分字串并以某種方式將其重新組合在一起。
一種是在您想要的標記字串處拆分,插入您的替換值,然后再次連接您的部分:
var s = "Provides a $modifier % bonus to Maximum Quality and a $modifier % chance for Special Traits when developing a Recipe.";
var v = new List<float> { 5.0f, 0.5f };
var result = string.Concat(s.Split("$modifier").Select((s, i) => $"{s}{(i < v.Count ? v[i] : string.Empty)}"));
uj5u.com熱心網友回復:
該方法Regex.Replace有一個多載,您可以在其中指定一個回呼方法來提供用于每個替換的值。
private string ReplaceWithList(string source, string placeHolder, IEnumerable<object> list)
{
// Escape placeholder so that it is a valid regular expression
placeHolder = Regex.Escape(placeHolder);
// Get enumerator for list
var enumerator = list.GetEnumerator();
// Use Regex engine to replace all occurences of placeholder
// with next entry from enumerator
string result = Regex.Replace(source, placeHolder, (m) =>
{
enumerator.MoveNext();
return enumerator.Current?.ToString();
});
return result;
}
像這樣使用:
string s = "Provides a $modifier% bonus to Maximum Quality and a $modifier% chance for Special Traits when developing a Recipe.";
List<object> list = new List<object> { 5, 0.5 };
s = ReplaceWithList(s, "$modifier", list);
請注意,您需要添加合理的錯誤處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321986.html
