我是正则表达式的新手,不知道如何使用它们。我想为下面的一段文本创建一个正则表达式来获取最小、平均和最大时间。我会将它们与 NSRegularExpression 一起使用来获取范围和字符串。
有人可以帮助为以下文本创建正则表达式。
round-trip min/avg/max/stddev = 3.073/6.010/13.312/2.789 ms
我是正则表达式的新手,不知道如何使用它们。我想为下面的一段文本创建一个正则表达式来获取最小、平均和最大时间。我会将它们与 NSRegularExpression 一起使用来获取范围和字符串。
有人可以帮助为以下文本创建正则表达式。
round-trip min/avg/max/stddev = 3.073/6.010/13.312/2.789 ms
把它分解。
我假设您想从该字符串中获取数值并扔掉其余的。
首先制作一个正则表达式来匹配一个数字:
\d
匹配一个数字\d*
匹配零个或多个数字\.
匹配一个句点(\d*\.\d*)
匹配零个或多个数字,然后是句点,然后是零个或多个数字然后把它变成一个 Cocoa 字符串:
@"(\\d*\\.\\d*)"
然后做一个NSRegularExpression
:
NSError error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\\d*\\.\\d*)"
options:NSRegularExpressionCaseInsensitive
error:&error];
然后得到一个包含所有匹配项的数组:
NSArray *matches = [regex matchesInString:string
options:0
range:NSMakeRange(0, [string length])];
然后提取值:
NSString* minText = [string substringWithRange:[matches[0] range]];
NSString* avgText = [string substringWithRange:[matches[1] range]];
// etc.
我将这些字符串转换为浮点数作为练习。:-)
更新:我发现自己对它的复杂性感到非常恶心,所以我做了一个小库,我谦卑地称之为Unsuck ,它以和方法NSRegularExpression
的形式增加了一些理智。以下是您如何使用它们:from
allMatches
NSRegularExpression *number = [NSRegularExpression from: @"(\\d*\\.\\d*)"];
NSArray *matches = [number allMatches:@"3.14/1.23/299.992"];
请查看 github 上的 unsuck 源代码,并告诉我我做错的所有事情 :-)
我知道你想要一个正则表达式,它们学习起来非常方便,但在这种情况下,它可能比你需要的要重一些。考虑到这一点,我提供了一个替代方案。我相信其他人也会给你一个正则表达式。
NSString* str = @"round-trip min/avg/max/stddev = 3.073/6.010/13.312/2.789 ms";
NSString* str2 = [str substringFromIndex:32];
NSArray* components = [str2 componentsSeparatedByString:@"/"];
CGFloat min = [[components objectAtIndex:0] doubleValue];
CGFloat avg = [[components objectAtIndex:1] doubleValue];
CGFloat max = [[components objectAtIndex:2] doubleValue];
NSLog(@"min/avg/max: %f/%f/%f",min,avg,max);
我通过使用来管理这个(.*) = (.+?)/(.+?)/(.+?)/(.*)