我如何从这个NSString中抽出一年?

时间:2015-09-19 16:23:03

标签: objective-c regex nsrange

我有很多像这样的电影片段的NSStrings:

@"Accepted (2006)"
@"Blade Runner (1982)"
@"(500) Days of Summer (2009)"
@"RoboCop (1987) - Criterion #23"

我正试图获得总是在(和)标题之间的四位数字年份。

这样做的正确方法是什么? NSRange?正则表达式?别的什么? Objective-C拜托,不是斯威夫特。

2 个答案:

答案 0 :(得分:4)

使用基于环视的正则表达式。

multiprocessing.util

使用捕获组。

"(?<=\\()\\d{4}(?=\\))"

由于"\\((\\d{4})\\)" (是正则表达式元字符,因此您需要按顺序转义这些字符以匹配文字)(符号。

)

答案 1 :(得分:1)

为此,使用NSString方法更简单:rangeOfString:options:使用带有后视和前瞻的正则表达式的NSRegularExpressionSearch选项:

NSRange range = [test rangeOfString:@"(?<=\\()\\d{4}(?=\\))" options:NSRegularExpressionSearch];
NSString *found = [test substringWithRange:range];

NSLog(@"found: %@", found);

输出:

  

发现:2006

有关详细信息,请参阅“ICU用户指南”:Regular Expressions

相关问题