C#正则表达式匹配候选词
来自文心一言(多次修改才正确的):
public App() { string input = "例子文字{备选,:'词1t324|备选词2gdfg,该方法|备选词3dsfdsf}继续{备选..*&fdgfd54词A|备选词.*&fdgfd54B|备选词.*&fdgfd54C}话术内容"; string result = ReplaceAlternatives(input); Console.WriteLine(result); } static string ReplaceAlternatives(string input) { string pattern = @"\{([^}]+)\}"; MatchCollection matches = Regex.Matches(input, pattern); Random random = new Random(); StringBuilder sb = new StringBuilder(input); int offset = 0; // 用于跟踪已经进行的替换导致的索引偏移 foreach (Match match in matches) { // 由于之前的替换,我们需要调整当前匹配项的索引 int adjustedIndex = match.Index - offset; string alternatives = match.Groups[1].Value; string[] options = alternatives.Split('|'); int randomIndex = random.Next(options.Length); string chosenOption = options[randomIndex]; // 计算要移除的字符串长度(即匹配项的长度) int removeLength = match.Length; // 执行替换 sb.Remove(adjustedIndex, removeLength); sb.Insert(adjustedIndex, chosenOption); // 更新偏移量 offset += removeLength - chosenOption.Length; } return sb.ToString(); } }
fffffffffffffffff
test red font.