1

以下のような文字列から部分文字列を抽出する方法はありますか

私の実際の文字列は「NS09A」または「AB455A」ですが、「NS09」または「AB455」のみが必要です(元の文字列の数値部分の終わりまで)。

どうすればこれを抽出できますか?

抽出できる部分文字列の開始位置と終了部分の位置を使用するようなGoogle検索の回答を見ましたが、ここでは「アルファベット+数字+アルファベット」の任意の組み合わせ.「アルファベット+数字」のみが必要です

4

5 に答える 5

4

誰もが同意するわけではないかもしれませんが、私は正規表現が好きです。探しているものを正確に指定できます。

NSString *string = @"AB455A";

// One or more "word characters", followed by one or more "digits":
NSString *pattern = @"\\w+\\d+";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                       options:0
                                     error:NULL];
NSTextCheckingResult *match = [regex firstMatchInString:string
                        options:NSMatchingAnchored
                          range:NSMakeRange(0, [string length])];
if (match != nil) {
    NSString *extracted = [string substringWithRange:[match range]];
    NSLog(@"%@", extracted);
    // Output: AB455
} else {
    // Input string is not of the expected form.
}
于 2013-08-01T11:25:53.810 に答える
3

これを試して:-

NSString *str=@"ASRF12353FYTEW";
NSString *resultStr;
for(int i=0;i<[str length];i++){
    NSString *character = [str substringFromIndex: [str length] - i];
    if([character intValue]){
        resultStr=[str substringToIndex:[str length]-i+1];
        break;
    }
}
NSLog(@"RESUKT STRING %@",resultStr);
于 2013-08-01T11:51:41.783 に答える
1

NSScannerおよびscanUpToCharactersFromSet:intoString:メソッドを使用して、解析を停止するために使用する文字を指定します。setScanLocation:これは、いくつかのロジックを含むループ内にある可能性があります。または、抽出する各セクションの開始を見つける方法が既にある場合に組み合わせて適用することもできます。


使用scanUpToCharactersFromSet:intoString:すると、次の無効な文字を探します。「特殊な」文字 (Unicode の意味で) である必要はありません。必要なコンテンツに対して有効ではない既知の文字セットである必要があります。したがって、次を使用できます。

[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]
于 2013-08-01T10:41:42.547 に答える
-3

- (NSString *)substringWithRange:(NSRange)aRangeクラスのメソッドを使用NSStringして、部分文字列を抽出できます。NSMakeRangeオブジェクトの作成に使用しNSRangeます。

于 2013-08-01T10:41:39.223 に答える