Objective-C: Find numbers in string Objective-C: Find numbers in string ios ios

Objective-C: Find numbers in string


Here's an NSScanner based solution:

// InputNSString *originalString = @"This is my string. #1234";// IntermediateNSString *numberString;NSScanner *scanner = [NSScanner scannerWithString:originalString];NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];// Throw away characters before the first number.[scanner scanUpToCharactersFromSet:numbers intoString:NULL];// Collect numbers.[scanner scanCharactersFromSet:numbers intoString:&numberString];// Result.int number = [numberString integerValue];

(Some of the many) assumptions made here:

  • Number digits are 0-9, no sign, no decimal point, no thousand separators, etc. You could add sign characters to the NSCharacterSet if needed.
  • There are no digits elsewhere in the string, or if there are they are after the number you want to extract.
  • The number won't overflow int.

Alternatively you could scan direct to the int:

[scanner scanUpToCharactersFromSet:numbers intoString:NULL];int number;[scanner scanInt:&number];

If the # marks the start of the number in the string, you could find it by means of:

[scanner scanUpToString:@"#" intoString:NULL];[scanner setScanLocation:[scanner scanLocation] + 1];// Now scan for int as before.


Self contained solution:

+ (NSString *)extractNumberFromText:(NSString *)text{  NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];  return [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];}

Handles the following cases:

  • @"1234" → @"1234"
  • @"001234" → @"001234"
  • @"leading text get removed 001234" → @"001234"
  • @"001234 trailing text gets removed" → @"001234"
  • @"a0b0c1d2e3f4" → @"001234"

Hope this helps!


You could use the NSRegularExpression class, available since iOS SDK 4.

Bellow a simple code to extract integer numbers ("\d+" regex pattern) :

- (NSArray*) getIntNumbersFromString: (NSString*) string {  NSMutableArray* numberArray = [NSMutableArray new];  NSString* regexPattern = @"\\d+";  NSRegularExpression* regex = [[NSRegularExpression alloc] initWithPattern:regexPattern options:0 error:nil];  NSArray* matches = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];  for( NSTextCheckingResult* match in matches) {      NSString* strNumber = [string substringWithRange:match.range];      [numberArray addObject:[NSNumber numberWithInt:strNumber.intValue]];  }  return numberArray; }