我是IOS的新手,正在寻找一些指导。
我有一个很长的NSString,我正在解析。开头可能有几个垃圾字符(可以是任何非字母字符),然后是11个数字或空格,然后是一个字母(A-Z)。我需要获取字母的位置,并将字母后面的11个字符的子字符串转换为字母后面的1个字符。
有人可以就如何做到这一点给我一些指导吗?
示例:'!!2553072 C'
我希望:'53072 '
答案 0 :(得分:2)
您可以使用正则表达式模式完成此操作:(.{11})\b[A-Z]\b
(.{11})
将抓取任意11个字符,\b[A-Z]\b
将在字边界上查找单个字符,这意味着它将被空格或字符串末尾包围。如果字符可以跟随示例中的C
,则删除最后一个\b
。这可以在Objective-C中完成,如下所示:
NSError *error;
NSString *example = @"!!2553072 C";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"(.{11})\\b[A-Z]\\b"
options:NSRegularExpressionCaseInsensitive
error:&error];
if(!regex)
{
//handle error
}
NSTextCheckingResult *match = [regex firstMatchInString:example
options:0
range:NSMakeRange(0, [example length])];
if(match)
{
NSLog(@"match: %@", [example substringWithRange:[match rangeAtIndex:1]]);
}
答案 1 :(得分:1)
您可以使用NSCharacterSet来拆分字符串,然后取出第一个剩余的组件(由垃圾和数字组成)并获取其子字符串。例如(未编译,未测试):
- (NSString *)parseString:(NSString *)myString {
NSCharacterSet *letters = [NSCharacterSet letterCharacterSet];
NSArray *components = [myString componentsSeparatedByCharactersInSet:letters];
assert(components.count > 0);
NSString *prefix = components[0]; // assuming relatively new Xcode
return [prefix substringFromIndex:(prefix.length - 11)];
}
答案 2 :(得分:1)
可能有更优雅的方式来执行涉及正则表达式或一些Objective-C魔法,但这是一个简单的解决方案(亲自测试)。
-(NSString *)getStringContent:(NSString *)input
{
NSString *substr = nil;
NSRange singleLetter = [input rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
if(singleLetter.location != NSNotFound)
{
NSInteger startIndex = singleLetter.location - 11;
NSRange substringRange = NSMakeRange(start, 11);
substr = [tester substringWithRange:substringRange];
}
return substr;
}