Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C正则表达式删除除数字以外的所有内容_Objective C_Nsregularexpression - Fatal编程技术网

Objective c 目标C正则表达式删除除数字以外的所有内容

Objective c 目标C正则表达式删除除数字以外的所有内容,objective-c,nsregularexpression,Objective C,Nsregularexpression,我想删除所有字符,我需要的是0-9之间的数字 您能给我举个例子来解决这个问题吗?您可以创建自己的NSCharacterSet,然后使用它的invertedSet修剪掉其中不包含的每个字符。下面是一个例子: NSString *stringWithLettersAndNumbers = @"345345345fff"; NSCharacterSet *myCharset = [NSCharacterSet characterSetWithCharactersInString:@"01234567

我想删除所有字符,我需要的是0-9之间的数字


您能给我举个例子来解决这个问题吗?

您可以创建自己的NSCharacterSet,然后使用它的invertedSet修剪掉其中不包含的每个字符。下面是一个例子:

NSString *stringWithLettersAndNumbers = @"345345345fff";

NSCharacterSet *myCharset = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
NSString *newString = [stringWithLettersAndNumbers stringByTrimmingCharactersInSet:[myCharset invertedSet]];

NSLog(@"%@",newString);

您可以创建自己的NSCharacterSet,然后使用其InversedSet修剪掉其中不包含的每个字符。下面是一个例子:

NSString *stringWithLettersAndNumbers = @"345345345fff";

NSCharacterSet *myCharset = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
NSString *newString = [stringWithLettersAndNumbers stringByTrimmingCharactersInSet:[myCharset invertedSet]];

NSLog(@"%@",newString);

在字符串中循环并拾取所有数字

NSMutableString *strResult = [NSMutableString string];
for (int position=0; position<text.length; position++) {
  unichar c = [text characterAtIndex:position];
  NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet];
  if ([numericSet characterIsMember:c]) {
    [strResult appendFormat:@"%C", c]; 
  }
}
NSMutableString*strResult=[NSMutableString];

对于(int position=0;position循环字符串并拾取所有数字)

NSMutableString *strResult = [NSMutableString string];
for (int position=0; position<text.length; position++) {
  unichar c = [text characterAtIndex:position];
  NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet];
  if ([numericSet characterIsMember:c]) {
    [strResult appendFormat:@"%C", c]; 
  }
}
NSMutableString*strResult=[NSMutableString];

对于(int position=0;position,正则表达式非常适合这种类型的东西:

NSString *orgStr = @"letters34243more32132letters";

NSString *result = [orgStr stringByReplacingOccurrencesOfString: @"\\D"
                                                     withString: @""
                                                        options: NSRegularExpressionSearch
                                                          range: NSMakeRange(0, orgStr.length)];
它所做的是查找任何非数字字符(定义为
\D
)并将其替换为空字符串,即删除它

不管它在字符串中的位置如何,它对任何这样的字符都是这样做的


模式字符串中的双反斜杠(\)是必需的,因为NSString文本需要一个额外的反斜杠来转义“真实”的反斜杠。

正则表达式非常适合这类内容:

NSString *orgStr = @"letters34243more32132letters";

NSString *result = [orgStr stringByReplacingOccurrencesOfString: @"\\D"
                                                     withString: @""
                                                        options: NSRegularExpressionSearch
                                                          range: NSMakeRange(0, orgStr.length)];
它所做的是查找任何非数字字符(定义为
\D
)并将其替换为空字符串,即删除它

不管它在字符串中的位置如何,它对任何这样的字符都是这样做的


模式字符串中的双反斜杠(\)是必需的,因为NSString文本需要一个额外的反斜杠来转义“real”一个。

谢谢你的示例别担心。请注意unichar与char不同。这个答案不是比OP最初要求的正则表达式更昂贵吗?@abbood很好。我没有比较ASM代码。但我认为正则表达式也无法避免低级别循环。如果我错了,请纠正我。谢谢你的示例否担心。请注意unichar与char是不同的。这个答案不是比像OP最初要求的那样做正则表达式更昂贵吗?@abbood很好。我没有比较ASM代码。但我认为正则表达式也无法避免低级别循环。如果我错了,请纠正我。谢谢你的例子。谢谢你的例子。