Преобразовать строку, возможно, включая кавычки, в StringCollection

У меня есть такая строка:

string subjectString = "one two \"three four\" five \"six seven\"";

и я хочу преобразовать его в коллекцию StringCollection следующим образом:

  • один
  • два
  • три четыре
  • 5
  • шесть семь

Есть ли способ, как добиться этого с помощью класса Regex в asp.net C# 2.0, как-то так?

  string subjectString = "one two \"three four\" five \"six seven\"";
  System.Collections.Specialized.StringCollection stringCollection = new System.Collections.Specialized.StringCollection();
  foreach (System.Text.RegularExpressions.Match match in System.Text.RegularExpressions.Regex.Matches(subjectString, "some_regex_here"))  
  {  
    stringCollection.Add(match.Value);  
  }

2 ответа

Решение

Я мог только придумать следующий шаблон регулярных выражений:

(?:"(.+?)")|(\w+?)(?:\s|$)

Это не идеально. Слишком ленив, чтобы протестировать все виды строковых комбинаций, но я попытался применить шаблон к вашей строке, и он возвращается точно так, как вы ожидали.

P / S: я тестировал только с использованием RegexBuddy, а не внутри.Net кодов.

У вас есть CSV, использующий пробелы в качестве разделителя, так что вы можете просто использовать CSV-парсер:

var subjectString = "one two \"three four\" five \"six seven\"";

using (var csvReader = CsvReader.FromCsvString(subjectString))
{
    csvReader.ValueSeparator = ' ';
    csvReader.ValueDelimiter = '"';

    while (csvReader.HasMoreRecords)
    {
        var record = csvReader.ReadDataRecord();
        Console.WriteLine(record[2]);
    }
}

Выход "три четыре".

Другие вопросы по тегам