从iOS中的字符串中提取子字符串?

从iOS中的字符串中提取子字符串?,ios,objective-c,nsstring,substring,Ios,Objective C,Nsstring,Substring,有没有办法从下面这样的字符串中提取子字符串 我真正的字符串是“NS09A”或“AB455A”,但我只想要“NS09”或“AB455”(直到原始字符串的数字部分的末尾)。 我如何提取这个 我看到谷歌搜索的答案,比如使用子字符串的起始位置和结束inf部分,我们可以提取它,但这里是“字母+数字+字母”的任意组合。我只需要“字母+数字”您可以使用-(NSString*)子字符串with range:(NSRange)使用NSString类上的aRange方法提取子字符串。使用NSMakeRange创建N

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

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

我如何提取这个


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

您可以使用
-(NSString*)子字符串with range:(NSRange)使用
NSString
类上的aRange
方法提取子字符串。使用
NSMakeRange
创建
NSRange
对象。

您可以使用
-(NSString*)substringWithRange:(NSRange)使用
NSString
类上的aRange
方法提取子字符串。使用
NSMakeRange
创建
NSRange
对象。

使用
NSScanner
scanupCharacters fromset:intoString:
方法指定应使用哪些字符停止解析。这可能与som处于循环中如果您已经有了查找要提取的每个部分的开头的方法,则可以将逻辑或它与
setScanLocation:
结合使用


使用
scanupCharactersFromSet:intoString:
时,您正在查找下一个无效字符。它不需要是“特殊”字符(在unicode意义上),只需要一组已知的字符,这些字符对所需内容无效。因此,您可以使用:

[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]

使用
NSScanner
scanupCharactersFromSet:intoString:
方法指定应使用哪些字符来停止解析。这可能是在具有某些逻辑的循环中进行的,或者可以与
setScanLocation:
一起应用,如果您已经有了一种方法来查找您想要的每个节的开头o提取物


使用
scanupCharactersFromSet:intoString:
时,您正在查找下一个无效字符。它不需要是“特殊”字符(在unicode意义上),只需要一组已知的字符,这些字符对所需内容无效。因此,您可以使用:

[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]
我测试了这段代码:

   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
我测试了这段代码:

   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

也许不是每个人都同意,但我喜欢正则表达式。它们允许指定 正是您想要的:

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 *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);
NSString*str=@“ASRF12353FYTEW”;
NSString*resultStr;
对于(int i=0;i请尝试以下方法:-

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);
NSString*str=@“ASRF12353FYTEW”;
NSString*resultStr;

对于(int i=0;iis字符串始终为“字母”、“数字”、“字母”?不,某些情况下,它将是这样的,在正常情况下,它类似于“字母”+“数字”字符串始终为“字母”、“数字”、“字母”?不,某些情况下它将是这样的,在正常情况下,它类似于“字母”+“数字”"我可以提到我用数字而不是特殊字符停止吗?我可以提到我用数字而不是特殊字符停止吗?为什么投反对票?它回答了提取子字符串的问题。我想,投票是做的,因为你的答案告诉我们使用范围提取子字符串。在这个问题中,没有p关节范围。首先需要找到范围,然后执行修剪操作,直到它。@Pankajrator我不知道你为什么会得到否决票,但为了努力在这里写一个答案,我现在将增加一票。@Navi你不应该为了答案而对答案进行否决票。如果你认为这是一个好的答案,你就投票。为什么要否决v注意?它回答了提取子字符串的问题。我认为,votedown是制作的,bcoz您的答案告诉您使用范围来提取子字符串。在这个问题中,没有特定的范围。需要首先找到范围,然后执行修剪操作,直到它。@PankajRathor我不知道为什么您获得了否决票,但对于eF在这里写一个答案,我现在加一票。@Navi你不应该为了答案而加一票。如果你认为这是一个好答案,你就加一票。@Kirti Mali如何在邮件验证时加一票。我喜欢加一票到
@
例如:mailname@gmail.com
表示我只想要
mailname
。你能用这个解决方案编辑你的文章吗?@Kirti Mali如何在邮件验证时使用子字符串。我想将子字符串设置为
@
例如:mailname@gmail.com
意味着我只想要
mailname
。你能用这个解决方案编辑你的帖子吗?