我正在尝试使用下一个代码:
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 - верно
答案 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:@""];'