2013-05-14 54 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 ** ... – 2013-05-14 09:45:17

+0

'NSLog(@“color%@,%@,%@”,redComponent,greenComponent,blueComponent);' 这应该是 'NSLog(@“color% @,%@,%@“,[redComponent stringValue],[greenComponent stringValue],[blueComponent stringValue]);' – 2013-05-14 09:46:43

+0

@AhmedZ .:对'NSNumber'使用'%@'完全没有问题。 – 2013-05-14 09:52:27

回答

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 2013-05-14 10:09:49

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 2013-05-14 10:00:15

+0

你的颜色字符串具有相同的值? – DharaParekh 2013-05-14 10:05:05

相关问题