Как вытащить содержимое фигурных скобок
Имеется строка: Антон,{привет|пока} как {дела|жизнь}?
Задача вытащить из скобок содержимое и выбрать рандомное значение, так же важно сохранить слова перед скобками/за скобками. Вышла пока-что только рандомизация внутренних слов:
string input = "привет|пока";
Random rnd = new Random();
string[] str = input.Split('|');
string result = str[rnd.Next(0, str.Lenght)];
Решение:
string subject = "{привет|пока}";
char[] chars = subject.ToCharArray();
bool start = false;
string res = "";
string oldString = "";
for (int i = 0, n = chars.Length; i < n; i++)
{
char c = chars[i];
if (c == '}')
{
start = false;
Random rnd = new Random();
string[] r = res.Split('|');
oldString += r[rnd.Next(0, r.Length)];
res = "";
}
if (start)
res += c.ToString();
if (c == '{')
start = true;
if (!start && c != '{' && c != '}')
oldString += c.ToString();
}
Ответы (1 шт):
Автор решения: VladD
→ Ссылка
Наверное, проще всего с регулярками.
// нам нужен нежадный захват
// внутренний текст положим в группу
static Regex regex = new Regex("{(.*?)}", RegexOptions.Compiled);
static void Main(string[] args)
{
string text = "Антон, {привет|пока} как {дела|жизнь}?";
var r = new Random();
string expanded = regex.Replace(text, match =>
{
var innerText = match.Groups[1].Value;
var alternatives = innerText.Split('|');
var chosen = alternatives[r.Next(alternatives.Length)];
return chosen;
});
}
И посмотрите вот сюда по поводу использования Random.