有没有办法从下面的字符串中提取子字符串
我的真实字符串是“NS09A”或“AB455A”,但我只想要“NS09”或“AB455”(直到原始字符串的数字部分的结尾)。
我怎样才能提取这个?
我看到谷歌搜索答案,比如使用子字符串的开始和结束部分的位置,我们可以提取它,但这里“字母+数字+字母”的任何组合。我只需要“字母+数字”
有没有办法从下面的字符串中提取子字符串
我的真实字符串是“NS09A”或“AB455A”,但我只想要“NS09”或“AB455”(直到原始字符串的数字部分的结尾)。
我怎样才能提取这个?
我看到谷歌搜索答案,比如使用子字符串的开始和结束部分的位置,我们可以提取它,但这里“字母+数字+字母”的任何组合。我只需要“字母+数字”
也许不是每个人都会同意,但我喜欢正则表达式。它们允许精确指定您要查找的内容:
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 *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
使用NSScanner
和scanUpToCharactersFromSet:intoString:
方法来指定应该使用哪些字符来停止解析。这可能是在一个带有一些逻辑的循环中,或者setScanLocation:
如果您已经有一种方法可以找到要提取的每个部分的开头,则可以结合使用它。
使用时,scanUpToCharactersFromSet:intoString:
您正在寻找下一个无效字符。它不需要是“特殊”字符(在 unicode 意义上),只是一组对您想要的内容无效的已知字符。因此,您可以使用:
[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]
您可以- (NSString *)substringWithRange:(NSRange)aRange
在类上使用方法NSString
来提取子字符串。用于NSMakeRange
创建NSRange
对象。