如何使用NSRegularExpression解析字符串以使用正则表达式提取数字?

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)

Ale*_*fee 8

分解.

我假设您想要从该字符串中获取数值并抛弃其余部分.

首先制作正则表达式以匹配数字:

  • \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形式fromallMatches方法增加了一些理智.这是你如何使用它们:

NSRegularExpression *number = [NSRegularExpression from: @"(\\d*\\.\\d*)"];
NSArray *matches = [number allMatches:@"3.14/1.23/299.992"];
Run Code Online (Sandbox Code Playgroud)

查看github上的unsuck源代码并告诉我我做错的所有事情:-)