Регулярное выражение, которое вы ищете: \\"(.*)\\"[ ^,]*|([^,]*),
в ObjC: (('\"' && string_1 && '\"' && 0-n spaces) || string_2 except comma) && comma
NSString *str = @"Christopher Bass,\"Cry, the Beloved Country ,Final Essay\",cbass@cgs.k12.va.us,som";
NSString *regEx = @"\\\"(.*)\\\"[ ^,]*|([^,]*),";
NSMutableArray *split = [[str componentsSeparatedByRegex:regEx] mutableCopy];
[split removeObject:@""]; // because it will print always both groups even if the other is empty
NSLog(@"%@", split);
// OUTPUT:
2012-02-07 17:42:18.778 tmpapp[92170:c03] (
"Christopher Bass",
"Cry, the Beloved Country ,Final Essay",
"cbass@cgs.k12.va.us",
som
)
RegexKitLite добавит обе строки в массив, поэтому вы получитес пустыми объектами для вашего массива.removeObject:@""
удалит их, но если вам нужно сохранить истинно пустые значения (например, ваш источник имеет val,,ue
), вам нужно изменить код следующим образом:
str = [str stringByReplacingOccurrencesOfRegex:regEx withString:@"$1$2∏"];
NSArray *split = [str componentsSeparatedByString:@"∏"];
$ 1 и $ 2 - это те дваСтроки, упомянутые выше, ∏ в этом случае символ, который, скорее всего, никогда не появится в обычном тексте (и его легко запомнить: option-shift-p).