У меня такая строка в файле.ini:
DateTimeFormat={"MMM dd hh:mm:ss","dd/MMM/yyyy:hh:mm:ss","yyyy-MM-dd hh:ss:mm.fff","MMM, dd yyyy"}
DateTime contain any posible format datetime we have.
Или как строка С#:
string DateTimeFormat= "{\"MMM dd hh:mm:ss\",\"dd/MMM/yyyy:hh:mm:ss\",\"yyyy-MM-dd hh:ss:mm.fff\"}";
Я хочу разбить строку как результат:
string[] result = {"MMM dd hh:mm:ss","dd/MMM/yyyy:hh:mm:ss","yyyy-MM-dd hh:ss:mm.fff"}
Как я могу разделить с помощью Regex в С# (я хочу разбить с begin "и" end)
Вы можете использовать спичку вместо раскола, и LINQ
, чтобы получить все захваченные группы в массиве (добавить System.Xml.Linq
и System.Linq
к вашему using
заявлению):
var DateTimeFormat = "{\"MMM dd hh:mm:ss\",\"dd/MMM/yyyy:hh:mm:ss\",\"yyyy-MM-dd hh:ss:mm.fff\"}";
var matches = Regex.Matches(DateTimeFormat, @"""([^""]+)""");
var res42 = matches.Cast<Match>().Select(p => p.Groups[1].Value).ToArray();
Регулярное выражение "([^"]+)"
предполагает, что в цитированных значениях нет экранированных двойных кавычек. Если вам нужно учитывать экранированные кавычки, вы можете использовать (?<!\\)"(.+?)(?<!\\)"
regex (@"(?<!\\)""(.+?)(?<!\\)"""
). Но я не думаю, что это так.
Вывод:
разбить его на запятую и избавиться от {} и "
s.Split(new [] { ',', '{', '}', '"' }, StringSplitOptions.RemoveEmptyEntries)
или с Regex и немного Linq, используя ту же технику
Regex.Split(s, "[,\"{}]").Where(e => e.Length >0).ToArray()
s.Trim('{', '}').Split(',')
потому что он не удаляет {
и }
в тексте, а только в начале и конце строки.