Je suis assez nouveau à l'utilisation regex
dans iOS
, et j'expérimente avec elle. J'ai du mal à trouver une solution au problème que j'ai. Je m'excuse à l'avance si cela a déjà été répondu ou si je manque quelque chose de vraiment évident et/ou si j'utilise le mauvais outil pour atteindre mon objectif. J'ai une chaîne que l'utilisateur va entrer dans un textfield
. Comment puis-je changer cela pour corriger l'orthographe d'un mot contenu dans la chaîne?Remplacer le texte avec plusieurs expressions régulières sur iOS
NSString *userstring = @"Jon Travalta";
NSError *error = NULL;
NSString *modstring = @"";
NSRegularExpression *regex = [[NSRegularExpression alloc]init];
regex = [NSRegularExpression regularExpressionWithPattern:@"(Jon|Johnathan|Jonathen|John)\\s(Travalta|Travalte|Travelta|Travolta)" options:NSRegularExpressionCaseInsensitive error:&error];
modstring = [regex stringByReplacingMatchesInString:userstring options:0 range:NSMakeRange(0,[userstring length]) withTemplate:@"John Travolta"];
Cela fonctionne et corrige la chaîne bien, mais disons que la chaîne est quelque chose d'autre. Je veux garder cette regex active pour vérifier la chaîne si elle contient l'un de ces éléments pour la corriger. Donc, disons que la chaîne est réglée, avant la vérification ci-dessus, sur "Anthony Hopkin". Je voudrais également utiliser un autre regexwithpattern
pour vérifier la chaîne pour corriger celle avec l'orthographe correcte du nom.
regex = [NSRegularExpression regularExpressionWithPattern:@"(Anthony|Antony|Tony|)\\s(Hopkin|Hapkin|Hopkins)" options:NSRegularExpressionCaseInsensitive error:&error];
modstring = [regex stringByReplacingMatchesInString:userstring options:0 range:NSMakeRange(0,[userstring length]) withTemplate:@"Anthony Hopkins"];
Ceci remplacera la chaîne avec Anthony Hopkins, même s'il s'agit de la première chaîne.
Si je fais une allocation différente de NSRegularExpression
et différent stringByReplacingMatchesInString
, il ne fait rien et la chaîne reste ce qu'elle était pour commencer.
La réponse est qu'il peut, en les combinant en 1. Cependant, le remplacement devrait savoir lequel correspondait. Cela nécessiterait une chaîne dynamique par opposition à une chaîne statique. – sln
@sln je suis d'accord une seule expression est probablement la façon dont je vais aller avec elle, mais comment puis-je utiliser une chaîne dynamique pour vérifier lequel correspond à choisir quel remplacement serait appelé. Pourriez-vous me donner un exemple s'il vous plaît? Je serais très reconnaissant – Ac128
le moyen le plus simple d'éliminer les fautes de frappe génère des valeurs _soundex_, il pourrait fonctionner dans votre cas aussi bien sur. – holex