Преобразовать строку, возможно, включая кавычки, в 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]);
}
}
Выход "три четыре".