【问题标题】:Dealing with separation characters within quotes when using componentsSeparatedByCharactersInSet使用 componentsSeparatedByCharactersInSet 时处理引号内的分隔符
【发布时间】:2013-06-24 21:58:49
【问题描述】:

我正在尝试使用逗号分隔字符串。但是,我不想包含引号区域内的逗号。在 Objective-C 中解决这个问题的最佳方法是什么?

我正在处理的一个例子是:

["someRandomNumber","Some Other Info","This quotes area, has a comma",...]

任何帮助将不胜感激。

【问题讨论】:

  • 没有简单的解决方案。这等效于解析使用相同语法的 CSV 文件(带引号的字符串,因此字段分隔符可以出现在字段值中)。您可能还必须处理包含引号字符的值。搜索有关解析 CSV 文件的解决方案。
  • 你可以在@"\",\"" 上拆分吗? IE。每个字符串都被引用了吗?

标签: objective-c arrays string code-separation


【解决方案1】:

正则表达式可能适用于此,具体取决于您的要求。例如,如果您总是尝试匹配用双引号括起来的项目,那么查找引号可能比担心逗号更容易。

例如,您可以这样做:

NSString *pattern = @"\"[^\"]*\"";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
  options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];

for (NSTextCheckingResult *match in matches) {
   NSRange matchRange = [match range];
   NString *substring = [string substringWithRange:matchRange];
   // do whatever you need to do with the substring
}

此代码查找括在引号中的字符序列(正则表达式模式"[^"]*")。然后对于每个匹配,它将匹配的范围提取为子字符串。

如果这不完全符合您的要求,那么调整它以使用不同的正则表达式模式应该不会太难。

我目前无法测试此代码,如果有任何错误,我深表歉意。希望基本概念应该清楚。

【讨论】:

  • 我最终弄明白了。我认为这个问题的措辞是错误的,并非所有内容都用引号括起来,这使事情变得更加困难。但是,您的解决方案看起来确实适用于引号中的所有内容。我最终通过一次查看一个字符的字符串来解决这个问题,使用逗号或右大括号作为对象终止符分隔所有内容。然后递归调用函数分析嵌套数组。
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
相关资源
最近更新 更多