Abh*_*nav 3 regex macos cocoa objective-c nsregularexpression
我是正则表达式的新手,并且不知道如何使用它们.我想为下面的文本创建一个正则表达式来获取min,avg和max时间.我将使用NSRegularExpression来获取范围然后获取字符串.
有人可以帮助创建以下文本的正则表达式.
round-trip min/avg/max/stddev = 3.073/6.010/13.312/2.789 ms
Run Code Online (Sandbox Code Playgroud)
分解.
我假设您想要从该字符串中获取数值并抛弃其余部分.
首先制作正则表达式以匹配数字:
\d 匹配一个数字\d* 匹配零个或多个数字\. 匹配一个时期(\d*\.\d*) 匹配零个或多个数字,然后是一个句点,然后是零个或多个数字然后将其转换为Cocoa字符串:
@"(\\d*\\.\\d*)"然后做一个NSRegularExpression:
NSError error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\\d*\\.\\d*)"
options:NSRegularExpressionCaseInsensitive
error:&error];
Run Code Online (Sandbox Code Playgroud)
然后得到一个包含所有匹配的数组:
NSArray *matches = [regex matchesInString:string
options:0
range:NSMakeRange(0, [string length])];
Run Code Online (Sandbox Code Playgroud)
然后拉出值:
NSString* minText = [string substringWithRange:[matches[0] range]];
NSString* avgText = [string substringWithRange:[matches[1] range]];
// etc.
Run Code Online (Sandbox Code Playgroud)
我将它作为练习将这些字符串转换为浮点数.:-)
更新:我发现自己因为复杂性而感到恶心,我创建了一个小库,我谦卑地称之为Unsuck,它以NSRegularExpression形式from和allMatches方法增加了一些理智.这是你如何使用它们:
NSRegularExpression *number = [NSRegularExpression from: @"(\\d*\\.\\d*)"];
NSArray *matches = [number allMatches:@"3.14/1.23/299.992"];
Run Code Online (Sandbox Code Playgroud)
请查看github上的unsuck源代码并告诉我我做错的所有事情:-)