如何删除除字母和数字之外的所有符号?

时间:2016-10-26 20:57:11

标签: objective-c regex nsregularexpression

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

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 - верно

2 个答案:

答案 0 :(得分:2)

你的正则表达式实际上是匹配你要删除的字符,但是它已经损坏,甚至没有这样做(由于“狂野”])。

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

<强>详情:

  • [^\\p{L}\\p{M}0-9\\s-]+ - 一个或多个不是的字符:
    • \\p{L} - Unicode字母
    • \\p{M} - diacritics
    • 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 - верно

答案 1 :(得分:0)

1找到num-alphabet set:

NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];

第二个得到它的反转集,我们将它用作分隔符:

NSCharacterSet *separatorSet = [alphaSet invertedSet];

3使用分隔符分隔旧字符串,然后将字符与@“”连接起来:

NSString *newString = [[oldString componentsSeparatedByCharactersInSet: separatorSet]componentsJoinedByString:@""];'