如何在iPhone应用程序中使用正则表达式来分隔字符串,(逗号)
我必须阅读有三列的.csv文件。 在解析.csv文件时,我得到了这种格式的字符串Christopher Bass,“哭泣的心爱的国家最后的文章”,cbass@cgs.k12.va.us 。 我想将三列的值存储在数组中,所以我使用了componentSeparatedByString:@","
method! 它成功地向我返回了包含三个组件的数组:
但是当列值中已经有一个逗号时,像这样的克里斯托弗·巴斯,“哭泣,亲爱的国家最后的散文”,cbass@cgs.k12.va.us它把字符串分成四个部分,因为有一个, (逗号)哭后:
所以,我如何使用正则表达式来处理这个问题。 我有“RegexKitLite”类,但我应该使用哪个正则表达式。 请帮忙!
谢谢-
任何正则表达式都可能会出现同样的问题,您需要的是通过转义逗号或通过突出显示字符串来清理条目或字符串: "My string"
。 否则,你将会遇到同样的问题。 祝你好运。
对于您的示例,您可能需要执行以下操作:
"Christopher Bass","Cry, the Beloved Country Final Essay","cbass@cgs.k12.va.us"
这样你就可以使用正则表达式,甚至可以使用NSString
类中的相同方法。
根本没有关系,但是消毒字符串的重要性:http://xkcd.com/327/ hehehe。
这个怎么样:
componentsSeparatedByRegex:@","|","
这应该分裂您串徘徊无论"
和,
一起出现在任一次序,产生了三个构件阵列。当然,这假设在字符串中的第二个元素总是括在括号中,字符"
和,
永远不会出现连续内三个组成部分。
如果这些假设中的任何一个都不正确,可以使用其他识别字符串组件的方法,但应该明确说明不存在通用解决方案。 如果三个组件字符串可以包含"
和,
在任何地方,甚至在这种情况下都不是有限的解决方案:
Doe, John,""Why Unescaped Strings Suck", And Other Development Horror Stories",Doe, John <john.doe@dev.null>
希望您的CSV数据中没有上述内容。 如果有,数据基本上不可用,并且您应该查看更好的CSV导出程序。
你正在搜索的正则表达式是: "(.*)"[ ^,]*|([^,]*),
在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)。
链接地址: http://www.djcxy.com/p/10397.html上一篇: How to use regular expression in iPhone app to separate string by , (comma)