所以我试图解析一个具有以下格式的字符串:
或者,它也可以用空格分隔:
以下是我现在的表现:
- (void) parseTagsInComment:(NSString *) comment
{
if ([comment length] > 0){
NSArray * stringArray = [comment componentsSeparatedByString:@" "];
for (NSString * word in stringArray){
}
}
}
我已经通过空间工作分离了组件,但如果它没有空间怎么办...如何迭代这些单词?我正在考虑使用正则表达式..但我不知道如何在Objective-C中编写这样的正则表达式。任何想法,对于能够涵盖这两种情况的正则表达式吗?
这是我的第一次尝试:
NSError * error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(@|#)\\S+" options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* wordArray = [regex matchesInString:comment
options:0 range:NSMakeRange(0, [comment length])];
for (NSString * word in wordArray){
}
哪个不起作用..我认为我的正则表达式是错误的。
答案 0 :(得分:2)
这是一种使用NSScanner的方法,它将分离的字符串和它们的范围的字符串表示形式放入一个数组中(这假设您的原始字符串以#开头 - 如果它没有,您需要它,然后在开始时将哈希预先添加到字符串中。
NSMutableArray *array = [NSMutableArray array];
NSString *str = @"#baz@marroon#red#blue #big@cat#dog";
NSScanner *scanner = [NSScanner scannerWithString:str];
NSCharacterSet *searchSet = [NSCharacterSet characterSetWithCharactersInString:@"#@"];
NSString *outputString;
while (![scanner isAtEnd]) {
[scanner scanUpToCharactersFromSet:searchSet intoString:nil];
[scanner scanCharactersFromSet:searchSet intoString:&outputString];
NSString *symbol = [outputString copy];
[scanner scanUpToCharactersFromSet:searchSet intoString:&outputString];
NSString *wholePiece = [[symbol stringByAppendingString:outputString]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *rangeString = NSStringFromRange([str rangeOfString:wholePiece]);
[array addObject:wholePiece];
[array addObject:rangeString];
}
NSLog(@"%@",array);
答案 1 :(得分:1)
我认为你真正想要的正则表达式是[@#]?\\w+
。它会找到一组字母,可选地以@或#开头。你的表达式不起作用,因为它寻找任何非空格字符,包括@和#。 (根据“单词”中的内容,您可能需要比\w
更具特异性的内容,但问题并不清楚。)
答案 2 :(得分:0)
如果你需要范围,那么NSRegularExpression可能效果很好:
NSString *comment = @"@baz@marroon#red#blue #big@cat#dog";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[#@]\\w+" options:0 error:nil];
NSArray* wordArray = [regex matchesInString:comment
options:0
range:NSMakeRange(0, [comment length])];
for (NSTextCheckingResult *result in wordArray)
NSLog(@"%@", [comment substringWithRange:result.range]);
或者,如果您只使用ASCII alpha字,则[@#][a-zA-z]+
可以正常工作。