Вы можете использовать
public static IEnumerable<string> SplitStr(string input)
{
var matches = Regex.Matches(input, @"(\w+=)(?:""([^""]*)""|(\S+)\b)");
foreach (Match match in matches)
{
yield return string.Concat(match.Groups.Cast<Group>().Skip(1).Select(x => x.Value)).Trim();
}
}
Данные регулярного выражения:
(\w+=)
- Группа 1: один или несколько символов слова и =
символ (?:""([^""]*)""|(\S+)\b)
- группа без захвата, соответствующая любой из двух альтернатив: "([^"]*)"
- "
, затем 0 или более символов, отличных от "
, а затем "
|
- или (\S+)\b
- любые 1+ символов, кроме пробелов, как можно больше, вплоть до положения границы слова.
См. Демонстрационный пример regex .
Код string.Concat(match.Groups.Cast<Group>().Skip(1).Select(x => x.Value)).Trim()
исключает значение группы 0 (полное совпадение) из групп, принимает группы 1, 2 и 3 и объединяет ихв одну строку и затем обрезает ее.
C # test :
var s = "AB=0, TX=\"123\", TEST=LDAP, USR=\" \", PROPS=\"DN=VB, XN=P\"";
Console.WriteLine(string.Join("\n", SplitStr(s)));
Вывод:
AB=0
TX=123
TEST=LDAP
USR=
PROPS=DN=VB, XN=P