c# Мне нужна помощь в разборе слов внутри символа вертикальной черты в список строк.
«Вы можете отменить бронирование бесплатно до |720| до прибытия. С вас будет взиматься плата |407,74 долларов США|, если вы отмените бронирование за |720| до прибытия».
Список строк должен содержать два элемента. 720 и 407,74 долларов США.
Спасибо
Я играл с вариациями, и вы правы. Он всегда будет четным элементом в списке. Спасибо.





private static IEnumerable<string> GetStringsBetweenDelimiters(string str, char delimiter)
{
int openingIndex = default; //index of the opening delimiter
int closingIndex = -1; //starts from -1 as otherwise it would not work for string
//starting with delimiter
while (true)
{
openingIndex = str.IndexOf(delimiter, closingIndex + 1);
//it has to be +1'd as otherwise it would return closingIndex
if (openingIndex < 0) yield break; //No more delimiters
closingIndex = str.IndexOf(delimiter, openingIndex + 1);
//+1'd for same reason as above
if (closingIndex < 0) //No closing delimiter
throw new InvalidOperationException("The given string has odd number of delimiters.");
//Might just break as well?
yield return str.Substring(openingIndex + 1, closingIndex - openingIndex - 1);
}
}
При вызове типа GetStringsBetweenDelimiters(str, '|') этот метод будет возвращать только значения между двумя символами вертикальной черты. Преимущество этого метода перед string.Split(delimiter) в том, что он не будет выделять лишние подстроки, которые не находятся между вертикальными чертами (You can cancel free of charge until, before check-in. You’ll be charged...), и, возможно, немного проще в использовании.
Контрольная работа:
foreach (string str in GetStringBetweenDelimiters(testStr, '|'))
{
Console.WriteLine(str);
}
отпечатки
720
407.74USD
720
string.Split. Каждая вторая запись, вероятно, та, которую вы хотите.