1

有没有办法从下面的字符串中提取子字符串

我的真实字符串是“NS09A”或“AB455A”,但我只想要“NS09”或“AB455”(直到原始字符串的数字部分的结尾)。

我怎样才能提取这个?

我看到谷歌搜索答案,比如使用子字符串的开始和结束部分的位置,我们可以提取它,但这里“字母+数字+字母”的任何组合。我只需要“字母+数字”

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 回答
2

我测试了这段代码:

   NSString *originalString = @"NS09A";

    // Intermediate
    NSString *numberString;
    NSString *numberString1;


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


    [scanner scanUpToCharactersFromSet:numbers intoString:&numberString];

    [scanner scanCharactersFromSet:numbers intoString:&numberString1];

    NSString *result=[NSString stringWithFormat:@"%@%@",numberString,numberString1];

    NSLog(@"Finally ==%@",result);

希望对您有所帮助

输出

Finally ==NS09

更新:

NSString *originalString = @"kirtimali@gmail.com";

NSString *result;
NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *cs1 = [NSCharacterSet characterSetWithCharactersInString:@"@"];

[scanner scanUpToCharactersFromSet:cs1 intoString:&result];

NSLog(@"Finally ==%@",result);

output:
Finally ==kirtimali
于 2013-08-01T11:19:43.023 回答
1

使用NSScannerscanUpToCharactersFromSet: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 回答