В C# вы можете использовать простое регулярное выражение для извлечения всех допустимых совпадений и использовать .Distinct()
для сохранения только уникальных значений.
Регулярное выражение простое:
"(?<ext>[^"]+)"|(?<ext>[^\s,]+)
Смотрите regex demo , вам нужны только значения группы "ext".
Подробности
"(?<ext>[^"]+)"
- "
, (группа "ext") любые 1+ символов, кроме "
, а затем "
|
- или (?<ext>[^\s,]+)
- (группа "ext") 1+ символов кроме пробелов и запятых
Фрагмент C#, код :
var text = "\".doc\" \"test.xls\", \".doc\",\"me.pdf\", \"test file.doc\".doc \".doc\"";
Console.WriteLine(text); // => ".doc" "test.xls", ".doc","me.pdf", "test file.doc".doc ".doc"
var pattern = "\"(?<ext>[^\"]+)\"|(?<ext>[^\\s,]+)";
var results = Regex.Matches(text, pattern)
.Cast<Match>()
.Select(x => x.Groups["ext"].Value)
.Distinct();
Console.WriteLine(string.Join("\n", results));
Вывод:
.doc
test.xls
me.pdf
test file.doc