这些是我的示例NSStrings(解析成数组),简化.
单个字符串对象被解析为“STRING1,STRING2然后DATE TIME然后 – A:VALUE”,例如:
The name of first value,first 17/04/2013 11:30:00 - A:30.0 // sometimes there is a comma after first string The name of second value 17/04/2013 11:00:00 - A:20.0 // sometimes there is NOT a comma after first string Name of third value 17/04/2013 10:30:00 - A:40.0 Fourth 17/04/2013 09:40:00 - A:50.0 Fifth value 17/04/2013 05:00:00 - A:10.0
好吧,我需要提取STRING或STRING,STRING的单独值:
The name of first value,first The name of second value Name of third value Fourth Fifth value
那么日期和时间
17/04/2013 11:30:00 17/04/2013 11:00:00 17/04/2013 10:30:00 17/04/2013 09:40:00 17/04/2013 05:00:00
最后,单个VALUES:
30.0 20.0 40.0 50.0 10.0
编辑:我正在尝试使用Martin R的代码来解析我的* allValues:
The *allValues array is something like: ( "The name of first value,first 17/04/2013 11:30:00 - A:30.0","The name of second value 17/04/2013 11:00:00 - A:20.0","Name of third value 17/04/2013 10:30:00 - A:40.0","Fourth 17/04/2013 09:40:00 - A:50.0","Fifth value 17/04/2013 05:00:00 - A:10.0" )
NSMutableArray *allValues = [parsedFeed valueForKey:@"values"]; for (int i=1; i < [allValues count]; i++) { NSString *string = [allValues objectAtIndex:i]; NSString *pattern = @"(.*) (\\d{2}/\\d{2}/\\d{4} \\d{2}:\\d{2}:\\d{2}) - A:(.*)"; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL]; NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0,[string length])]; if (match != nil) { NSString *s1 = [string substringWithRange:[match rangeAtIndex:1]]; NSString *s2 = [string substringWithRange:[match rangeAtIndex:2]]; NSString *s3 = [string substringWithRange:[match rangeAtIndex:3]]; NSLog(@"First part: %@",s1); NSLog(@"Second part: %@",s2); NSLog(@"Third part: %@",s3); } }
但在这种情况下,我无法获得任何NSLog结果(匹配== nil).发生了什么?谢谢!
解决方法
如果日期/时间具有固定格式,则可以使用正则表达式:
NSString *string = @"The name of first value,first 17/04/2013 11:30:00 - A:30.0"; NSString *pattern = @"(.*) (\\d{2}/\\d{2}/\\d{4} \\d{2}:\\d{2}:\\d{2}) - A:(.*)"; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL]; NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0,[string length])]; if (match != nil) { NSString *s1 = [string substringWithRange:[match rangeAtIndex:1]]; NSString *s2 = [string substringWithRange:[match rangeAtIndex:2]]; NSString *s3 = [string substringWithRange:[match rangeAtIndex:3]]; NSLog(@"First part: %@",s3); }
输出:
First part: The name of first value,first Second part: 17/04/2013 11:30:00 Third part: 30.0