2016-10-26 1 views
2

Je suis en train utilisez le code suivant:Comment supprimer tous les symboles d'une chaîne à l'exception des lettres et des chiffres?

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:@""]; 

mais il ne fonctionne pas. J'utilise différentes variantes de ceci, mais sans succès aussi.

Exemple de texte:

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

sortie Exemple:

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

Si vous devez supprimer tous les caractères sauf lettres et en chiffres le '@" [^ \\ p {L} \\ p {M} 0-9] + "'. Si vous devez également garder des traits d'union, gardez le '-' à la fin de la classe de caractères. Pourriez-vous s'il vous plaît partager un cas de test complet? –

+0

Mais si je ne veux obtenir que des lettres et des chiffres, que dois-je utiliser? – Viktorianec

+1

Cochez la case https://ideone.com/dvUxdp. '% Text-1();' => 'Text1' avec' @ "[^ \\ p {L} \\ p {M} 0-9] +" 'regex. Est-ce ce dont vous avez besoin? –

Répondre

2

Votre regex est correspondant en fait les caractères que vous souhaitez supprimer, mais il est corrompu et ne même pas faire que (en raison d'un "sauvage" ]).

Si vous devez supprimer tous les caractères à l'exception des lettres, des chiffres, des tirets et des espaces, utilisez @"[^\\p{L}\\p{M}0-9\\s-]+".

Détails:

  • [^\\p{L}\\p{M}0-9\\s-]+ - un ou plusieurs caractères qui ne sont pas:
    • \\p{L} - lettres Unicode
    • \\p{M} - diacritiques
    • 0-9 - chiffres ASCII
    • \\s - espace blanc
    • - - un trait d'union littéral.

Voir la ligne 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); 

Résultat: Это тестовый вопрос номер 1256 - верно

+1

C'est une réponse parfaite et brillante avec les meilleures traditions de S.O. Merci Monsieur. – Viktorianec

0

1er trouver l'ensemble num-alphabet:

NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet]; 

2 obtenir l'ensemble inverti de celui-ci, et nous Utilisez-le comme séparateur:

NSCharacterSet *separatorSet = [alphaSet invertedSet]; 

séparateur d'utilisation 3nd pour séparer la vieille chaîne, puis joindre les caractères de retour avec @ « »:

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