将包含引号的字符串转换为StringCollection

时间:2013-04-26 10:49:33

标签: c# asp.net regex stringcollection

我有一个这样的字符串:

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

我希望将它转换为StringCollection,如下所示:

  • 一个
  • 2
  • 三四
  • 5
  • 六七

有没有办法如何使用asp.net C#2.0中的Regex类实现这一点,不知何故这样?

  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 个答案:

答案 0 :(得分:3)

您所拥有的是使用空格作为分隔符的CSV,因此您只需使用CSV parser

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]);
    }
}

输出为“三四”。

答案 1 :(得分:0)

我只能提出以下正则表达式模式:

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

这不完美。懒得测试所有类型的字符串组合,但我尝试在你的字符串上应用模式,它返回的结果与你的预期完全一样。

P / S:我只使用RegexBuddy测试,而不是.Net代码。