有没有办法从下面的字符串中提取子字符串
我的真实字符串是“NS09A”或“AB455A”,但是我只想要“NS09”或“AB455”(直到原始字符串数字部分的末尾)。
我如何提取这个?
我看到google搜索答案,比如使用起始位置和endinf子字符串的一部分,我们可以提取它,但这里有“Alphabets + number + alphabets”的任意组合。我只需要“”字母+数字“
答案 0 :(得分: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.
}
答案 1 :(得分: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);
答案 2 :(得分: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
答案 3 :(得分:1)
使用NSScanner
和scanUpToCharactersFromSet:intoString:
方法指定应该使用哪些字符来停止解析。如果您已经有一种方法可以找到要提取的每个部分的开头,那么这可以在一个带有某些逻辑的循环中,也可以与setScanLocation:
一起应用。
使用scanUpToCharactersFromSet:intoString:
时,您正在寻找下一个无效字符。它不需要是一个“特殊”字符(在unicode意义上),只是一组已知的字符对您想要的内容无效。所以,你可以使用:
[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]
答案 4 :(得分:-3)
您可以在- (NSString *)substringWithRange:(NSRange)aRange
类上使用NSString
方法来提取子字符串。使用NSMakeRange
创建NSRange
对象。