Вы можете использовать Regex, чтобы проанализировать значение и затем получить результат. Например,
var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
.Cast<Match>()
.Select(x=>new {Key = x.Groups["Key"].Value,Value = x.Groups["Value"].Value,});
Это даст вам коллекцию в виде следующего:
Теперь вы можете получить значение где ключ равно «ПУНКТ» с использованием Linq.
var itemValue = valueCollection.First(x=>x.Key=="ITEM").Value;
В качестве альтернативы, вы можете преобразовать строку в словарь как
var valueCollection = Regex.Matches(datastring,@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.+?(?=""))""\)")
.Cast<Match>()
.ToDictionary(x=>x.Groups["Key"].Value,y=>y.Groups["Value"].Value);
Теперь вы можете анализировать требуемое значение ITEM
как
var itemValue = valueCollection["ITEM"];
Обновление на основе комментария
Если вы ожидаете пустые значения, вы можете использовать следующий шаблон регулярных выражений.
@"\(""(?<Key>.+?(?=""))""\s+""(?<Value>.*?(?=""))""\)"