gpt4 book ai didi

iphone - 在Objective-C中解析以@和#开头的字符串

转载 作者:行者123 更新时间:2023-11-28 20:35:18 25 4
gpt4 key购买 nike

所以我正在尝试解析具有以下格式的字符串:

baz@marroon#red#blue #big@cat#dog

或者,也可以用空格分隔:

baz @marroon #red #blue #big @cat #dog

这是我现在的做法:

- (void) parseTagsInComment:(NSString *) comment
{
if ([comment length] > 0){
NSArray * stringArray = [comment componentsSeparatedByString:@" "];
for (NSString * word in stringArray){

}
}
}

我已经得到了用空格分隔的组件,但如果没有空格怎么办……我该如何遍历这些单词?我正在考虑使用 regex .. 但我不知道如何在 objective-C 中编写这样的 regex。有什么想法可以涵盖这两种情况的正则表达式吗?

这是我的第一次尝试:

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){

}

这不起作用..我认为我的正则表达式是错误的。

最佳答案

这是一种使用 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);

关于iphone - 在Objective-C中解析以@和#开头的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com