以下のような文字列から部分文字列を抽出する方法はありますか
私の実際の文字列は「NS09A」または「AB455A」ですが、「NS09」または「AB455」のみが必要です(元の文字列の数値部分の終わりまで)。
どうすればこれを抽出できますか?
抽出できる部分文字列の開始位置と終了部分の位置を使用するようなGoogle検索の回答を見ましたが、ここでは「アルファベット+数字+アルファベット」の任意の組み合わせ.「アルファベット+数字」のみが必要です
以下のような文字列から部分文字列を抽出する方法はありますか
私の実際の文字列は「NS09A」または「AB455A」ですが、「NS09」または「AB455」のみが必要です(元の文字列の数値部分の終わりまで)。
どうすればこれを抽出できますか?
抽出できる部分文字列の開始位置と終了部分の位置を使用するようなGoogle検索の回答を見ましたが、ここでは「アルファベット+数字+アルファベット」の任意の組み合わせ.「アルファベット+数字」のみが必要です
誰もが同意するわけではないかもしれませんが、私は正規表現が好きです。探しているものを正確に指定できます。
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.
}
これを試して:-
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);
NSScanner
およびscanUpToCharactersFromSet:intoString:
メソッドを使用して、解析を停止するために使用する文字を指定します。setScanLocation:
これは、いくつかのロジックを含むループ内にある可能性があります。または、抽出する各セクションの開始を見つける方法が既にある場合に組み合わせて適用することもできます。
使用scanUpToCharactersFromSet:intoString:
すると、次の無効な文字を探します。「特殊な」文字 (Unicode の意味で) である必要はありません。必要なコンテンツに対して有効ではない既知の文字セットである必要があります。したがって、次を使用できます。
[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]
- (NSString *)substringWithRange:(NSRange)aRange
クラスのメソッドを使用NSString
して、部分文字列を抽出できます。NSMakeRange
オブジェクトの作成に使用しNSRange
ます。