2016-11-17 2 views
0

Je suis en train de créer une expression régulière pour détecter si elle correspond à la chaîne suivante mais qu'elle ne fonctionne pas. Voici mon code:Swift: Remplacement de la sous-chaîne à l'aide de l'expression régulière ne fonctionnant pas

var str = "asdasdd.ASD98ASD09ASD098ASD098ADS908" 
let commsRegex = "\\D[a-z]{7,}.[^a-zA-Z0-9]{28,}" 

if (str.rangeOfString(commsRegex,options: .RegularExpressionSearch) != nil) { 

     str = "itwork.yes" 
     } 

Quelqu'un d'entre vous sait ce que je fais mal?

Je vais vraiment apprécier votre aide

+1

essayez comme ceci '"^[a-z] {7} \\. [A-Z0-9] {28} $ "' –

+1

@LeoDabus cela fonctionne très bien. Question si je asdasdd ajouter ~ sdd ne fonctionne pas ce qui peut modifier pour pouvoir détecter "et ~ sdd.ASD98ASD09ASD098ASD098ADS908" par exemple – user2924482

+0

Est ~ requis d'être à un endroit spécifique (milieu de ce premier groupe 7 caractères) '" [ az] {3} ~ [az] {3} \\. [A-Z0-9] {28} $ "' si ce n'est pas "" [az ~] {7} \\. [A-Z0-9] { 28} $ "' –

Répondre

2

Votre reg ex semble incorrecte, en particulier cette partie:

[^ a-zA-Z0-9]

Notez que le en caractères gras ^, cela signifie que seuls les caractères correspondants sont et non dans AZ AZ et 0-9. Je suppose que vous voulez supprimer ce personnage de votre regex.

En outre, je ne suis pas sûr de \\D, cela correspondra à tout non-chiffre, mais votre chaîne commence par 7 caractères qui semble correspondre à la partie suivante, peut-être qui devrait être retiré aussi bien si vous attendez cette chaîne pour correspondre à l'expression régulière.

+1

Oui. En outre, l'échec d'échapper le caractère '. '(Comme indiqué par Leo) est également un problème. Aussi, je suppose qu'il a inclus le '^' pour essayer de faire correspondre le début de la chaîne, donc ce n'est pas tant que "supprimer" le '^' pour le déplacer juste au début du modèle, avant le '[' et ']'. – Rob