2013-05-14 1 views
0

я пытаюсь оценить это предложение:NsRegularExpressions несколько номеров с плавающей точкой разделения запятыми

<font color="0.839216,0.839216,0.839216" strokeColor="none" size="35" face="Avenir-Book"> 

мне нужно извлечь 3 значения с плавающей точкой атрибута цвета

с этим кодом:

NSRegularExpression* colorRegex = [[[NSRegularExpression alloc] initWithPattern:@"color=([0-9]+),([0-9]+),([0-9]+)" options:0 error:NULL] autorelease]; 

[colorRegex enumerateMatchesInString:tag options:0 range:NSMakeRange(0, [tag length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){ 


NSNumber *redComponent=[NSNumber numberWithFloat: [[tag substringWithRange: match.range] floatValue] ]; 
NSNumber *greenComponent=[NSNumber numberWithFloat: [[tag substringWithRange: match.range ] floatValue] ]; 
NSNumber *blueComponent=[NSNumber numberWithFloat: [[tag substringWithRange: match.range] floatValue] ]; 

self.color=[[UIColor alloc] initWithRed:redComponent.floatValue green:greenComponent.floatValue blue:blueComponent.floatValue alpha:1]; 

NSLog(@"color %@,%@,%@",redComponent,greenComponent,blueComponent); 

Я проверил несколько регулярных выражений, но мне это не удалось, может кто-нибудь мне помочь?

+0

Вы используете **% @ ** в NSLog для ** NSNumber ** ... –

+0

'NSLog (@ "% @ цвета,% @,% @", redComponent, greenComponent, blueComponent);' Это должно быть 'NSLog (@" цвет% @,% @,% @ ", [redComponent stringValue], [greenComponent stringValue], [blueComponent stringValue]);' –

+0

@AhmedZ .: Использование '% @' для 'NSNumber' не является проблемой вообще. –

ответ

0

Ваш шаблон не соответствует кавычки " и точки ., поэтому он должен выглядеть так:

initWithPattern:@"color=\"([0-9.]+),([0-9.]+),([0-9.]+)\"" 

А внутри блока, вы должны использовать rangeAtIndex:, чтобы получить значение группы захвата, так что это будет выглядеть как (упрощая код немного позже):

float redComponent = [[tag substringWithRange: [match rangeAtIndex:1]] floatValue]; 
float greenComponent = [[tag substringWithRange: [match rangeAtIndex:2]] floatValue]; 
float blueComponent = [[tag substringWithRange: [match rangeAtIndex:3]] floatValue]; 
self.color = [[UIColor alloc] initWithRed:redComponent green:greenComponent blue:blueComponent alpha:1]; 

NSLog(@"color %f,%f,%f", redComponent, greenComponent, blueComponent); 
+0

Большое вам спасибо, отлично работал – user2380984

0
testArray = [[NSArray alloc] init]; 
NSString *testString = [[NSString alloc] initWithFormat:@"0.309804,0.784314,0.992157"]; 
testArray = [testString componentsSeparatedByString:@","]; 

Теперь вы можете использовать значения из testArray. Кроме того, вы можете преобразовать его в междунар или поплавок

0

Попробуйте это:

NSString *color = @"color=0.309804,0.784314,0.992157"; 
color = [color stringByReplacingOccurrencesOfString:@"color=" withString:@""]; 
NSArray *arrColor = [color componentsSeparatedByString:@","]; 

NSNumber *redComponent; 
NSNumber *greenComponent; 
NSNumber *blueComponent; 

for (int i = 0; i < [arrColor count]; i++) { 
    if (i == 0) redComponent=[NSNumber numberWithFloat:[[arrColor objectAtIndex:i] floatValue]]; 
    if (i == 1) greenComponent=[NSNumber numberWithFloat:[[arrColor objectAtIndex:i] floatValue]]; 
    if (i == 2) blueComponent=[NSNumber numberWithFloat:[[arrColor objectAtIndex:i] floatValue]]; 
} 
NSLog(@"color %@,%@,%@",redComponent,greenComponent,blueComponent); 

Выход:

цвет 0.309804,0.784314,0.992157

+0

благодарит за ответ, но дает мне этот результат цвета 0,0.784314,0.992157 – user2380984

+0

Ваша цветная строка имеет такое же значение? – DharaParekh