目标C:字符串标记化

时间:2015-10-20 12:26:04

标签: objective-c nsstring tokenize

有没有一种很好的方法来标记以下字符串?我想得到括号之间的字母。

[快速]棕色狐狸跳到了[heli] [直升机]上。

我想到的最简单的解决方案是用[。将初始字符串标记为数组。然后我会迭代数组并使用]标记每个项目,返回第一个项目。为了提高效率,我会检查每个字符串,以确保在进行更多相关处理之前它包含有问题的令牌。

然而,这似乎是hackish和业余。另外,上面的示例将创建5个数组来处理字符串。有人有想法吗?

1 个答案:

答案 0 :(得分:1)

一个选项是使用正则表达式在字符串中搜索所需的值:

NSString *myString = @"The [quick] brown fox leaped [onto] the [heli][copter].";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression         
    regularExpressionWithPattern:@"\\[.*?\\]"
    options:NSRegularExpressionCaseInsensitive
    error:&error];
[regex enumerateMatchesInString:myString options:0 range:NSMakeRange(0, [myString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
    //Handle your matches here
}];

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSRegularExpression_Class/

在这种情况下,返回的值仍将包含括号。如果您只想要这些值,则可以删除每个值的括号,如:

string = [string substringFromIndex:1];

string = [string substringToIndex:[string length] - 1];

可以创建/验证RegEx,例如:http://www.regexr.com

/ edit:将RegEx改为Nikolai Ruhe评论中提出的那个。感谢。