私はIOSを初めて使用し、ガイダンスを探していました。
解析している長いNSStringがあります。最初に数文字のゴミ(文字以外の文字でもかまいません)、11桁の数字またはスペース、1文字(AZ)が含まれる場合があります。文字の位置を取得し、文字の後ろに11文字から文字の後ろに1文字の部分文字列を取得する必要があります。
誰かがそれを行う方法について私にいくつかのガイダンスを与えることができますか?
例:'!!2553072 C'
そして私は欲しい:'53072 '
これは正規表現パターンで実現できます。(.{11})\b[A-Z]\b
は(.{11})任意の 11 文字を取得\b[A-Z]\bし、単語境界で 1 文字を探します。つまり、スペースで囲まれているか、文字列の末尾にあることを意味します。例で文字が続く場合は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]]);
}
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)];
}
正規表現や 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;
}