2

以下のテキストから数値を取得するために NSScanner を使用していました。しかし、結果が期待どおりでない場合もあります。iOS 4 で利用できる NSRegularExpression クラスは、この種の抽出を行うのに適していると聞きました。私は NSRegularExpression の初心者なので、Apple が提供するドキュメントは理解しにくいことがわかりました。どんな助けでも大歓迎です。ありがとう。

入力:

1D03 04 10 17 47 D24--

出力:

03 04 10 17 47 24

最初の 5 セットの数値は 59 未満で、最後のセットは 39 未満である必要があります。

4

2 に答える 2

2

これを試して ..

NSString *originalString = @"1D03 04 10 17 47 D24---";

NSLog(@"%@", originalString);
NSMutableString *strippedString = [NSMutableString 
                                   stringWithCapacity:originalString.length];

NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *numbers = [NSCharacterSet 
                           characterSetWithCharactersInString:@"0123456789  "];

while ([scanner isAtEnd] == NO) {
    NSString *buffer;
    if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {
        [strippedString appendString:buffer];

    } else {
        [scanner setScanLocation:([scanner scanLocation] + 1)];
    }
}

NSLog(@"%@", strippedString);
于 2011-10-12T05:21:57.337 に答える
1

またはこれ:

NSString *string = @"1D03 04 10 17 47 D24---";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\S*(\\d{2})\\S*"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];


NSString *modifiedString = [regex stringByReplacingMatchesInString:string
                                                           options:0
                                                             range:NSMakeRange(0, [string length])
                                                      withTemplate:@"$1"];

この正規表現は、先頭と末尾が 0 個以上のスペースなし文字 (\S) で、中央の 2 桁 (\d) にあるものすべてに一致します。一致は、文字列の途中にある 2 桁の数字に置き換えられます。

于 2011-10-12T06:24:03.103 に答える