如何删除字符串中除字母和数字以外的所有符号?

How delete all symbols from string except letters and numbers?

我正在尝试使用下一个代码:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\p{L}[0-9]]+|-" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];

但它不起作用。我使用了这个的不同变体,但也没有成功。

示例文本:

Это тестовый.!!?! ;$%#@@@## (вопрос) номер 1256 - верно.

示例输出:

Это тестовый вопрос номер 1256 - верно

第一次找到 num-alphabet 集:

NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];

第 2 次得到它的反转集,我们将用它作为分隔符:

NSCharacterSet *separatorSet = [alphaSet invertedSet];

3nd 使用分隔符分隔旧字符串,然后使用@"":

将字符重新连接在一起
NSString *newString = [[oldString componentsSeparatedByCharactersInSet: separatorSet]componentsJoinedByString:@""];'

您的正则表达式实际上匹配您要删除的字符,但它已损坏并且甚至没有这样做(由于 "wild" ])。

如果您需要删除除字母、数字、连字符和空格之外的所有字符,请使用 @"[^\p{L}\p{M}0-9\s-]+"

详情:

  • [^\p{L}\p{M}0-9\s-]+ - 一个或多个字符不是:
    • \p{L} - Unicode 字母
    • \p{M} - 变音符号
    • 0-9 - ASCII 数字
    • \s - 空格
    • - - 文字连字符。

在线查看Objective-C demo:

NSString *text = @"Это тестовый.!!?! ;$%#@@@## (вопрос) номер 1256 - верно";
NSError *error = NULL;
NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"[^\p{L}\p{M}0-9\s-]+" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *result = [regexp stringByReplacingMatchesInString:text options:0 range:NSMakeRange(0, [text length]) withTemplate:@""];
NSLog(result);

结果:Это тестовый вопрос номер 1256 - верно