从objective-c中解析的NSString中提取单个值

前端之家收集整理的这篇文章主要介绍了从objective-c中解析的NSString中提取单个值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这些是我的示例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

猜你在找的C&C++相关文章