iPhone , NSRegularExpression big float



我有以下代码:

-(NSString*)getNumberFromString(NSString*)theString{
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"rhs: "([0-9]*[.]*[0-9]*)" options:NSRegularExpressionCaseInsensitive | NSRegularExpressionAnchorsMatchLines error:&error];
    NSArray *matches = [regex matchesInString:theString options:0 range:NSMakeRange(0, [theString length])];
    NSTextCheckingResult *match = [matches objectAtIndex:0];
    return [theString substringWithRange:[match rangeAtIndex:1]]);
}

当我尝试解析这个字符串时:

{lhs: "1 example", rhs: "44.5097254 Indian sample", error: "", icc: true}

我得到了结果44.5097254

但对于这个字符串:

{lhs: "1 example", rhs: "44.5097254.00.124.2 sample", error: "", icc: true}

我得到了一个错误的44结果。我希望得到44.5097254.00.124.2

我做错了什么?

您要查找的正则表达式是rhs: "(d+(?:.d+)*)

-(NSString*)getNumberFromString:(NSString*)theString
{
    NSError *error = NULL;
    NSRegularExpression *regex =
    [NSRegularExpression regularExpressionWithPattern:@"rhs: "(\d+(?:\.\d+)*)"
                                              options:NSRegularExpressionCaseInsensitive | NSRegularExpressionAnchorsMatchLines
                                                error:&error];
    NSArray *matches = [regex matchesInString:theString
                                      options:0
                                        range:NSMakeRange(0, [theString length])];
    NSTextCheckingResult *match = [matches objectAtIndex:0];
    return [theString substringWithRange:[match rangeAtIndex:1]];
}
...
     NSLog(@"%@", [self getNumberFromString:
                   @"{lhs: "1 example", rhs: "44.5097254.00.124.2 sample", error: "", icc: true}"]);

输出:44.5097254.00.124.2

就像我在上一个问题中编辑的那样,在正则表达式的末尾添加一个*可以完成以下操作:

  -(NSString*)getNumberFromString(NSString*)theString{
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"rhs: "(([0-9]*[.]*[0-9]*)*)" options:NSRegularExpressionCaseInsensitive | NSRegularExpressionAnchorsMatchLines error:&error];
    NSArray *matches = [regex matchesInString:theString options:0 range:NSMakeRange(0, [theString length])];
    NSTextCheckingResult *match = [matches objectAtIndex:0];
    return [theString substringWithRange:[match rangeAtIndex:1]]);
}

对于未来,请试着理解答案的作用。只是复制代码并意识到它不符合您的要求是可以的。但首先要自己做一些研究。您可以很容易地看到,添加星号将使表达式对每个长度的值都有效。

最新更新