J'essaie de chercher le mot Gadaffi. Quelle est la meilleure expression régulière pour rechercher cela?
Jusqu'à présent, ma meilleure tentative est:
\b[KG]h?add?af?fi$\b
Mais il me semble toujours manquer certains journaux. Aucune suggestion?
Mise à jour: j'ai trouvé une liste assez complète ici: http://blogs.abcnews.com/theworldnewser/2009/09/how-many-different-ways-can-you-spell-gaddafi.html
La réponse ci-dessous correspond aux 30 variantes:
Kadaffi Kadafi Kadafy Kadhafi Kadhafi Kadhafi Kadhafi Gathafi Ghadaffi Khadafi Ghaddafi Ghaddafy Gheddafi Kadaffi Kadafi Kadhafi Kadhafi Kazzafi Khadaffy Khadafy Khaddafi Kadafi Kadhafi Kadhafi Qadhdhafi Qadthafi Qathafi Quathafi Qudhafi Kad'afi
.+
être la seule expression régulière valide.Réponses:
\b[KGQ]h?add?h?af?fi\b
La transcription en arabe est (Wiki dit) "Qaḏḏāfī", donc peut-être en ajoutant un Q. Et un H ("Kadhafi", comme le mentionne l'article (voir ci-dessous)).
Btw, pourquoi y a-t-il un
$
à la fin de l'expression régulière?Btw, bel article sur le sujet:
Kadhafi, Kadafi ou Kadhafi? Pourquoi le nom du chef libyen est-il orthographié de différentes manières? .
ÉDITER
Pour faire correspondre tous les noms de l' article que vous avez mentionné plus tard , cela devrait tous les faire correspondre. Espérons juste que cela ne correspondra pas à beaucoup d'autres choses: D
la source
d
également à un ḏ?Qaḏḏāfī
, l'expression régulière devrait aussi vérifierQaddafi
. Si vous souhaitez également rechercher la transcription arabe, recherchez-la simplement - je ne pense pas qu'il existe d'autres variantes de la transcription arabe, uniquement des transcriptions anglaises.?
au lieu de lettres). Cela pourrait être exagéré.Facile ...
(Qadaffi|Khadafy|Qadafi|
...)
... il est auto-documenté, maintenable, et en supposant que votre moteur d'expression régulière compile réellement des expressions régulières (plutôt que de les interpréter), il compilera vers le même DFA qu'une solution plus obscure.Écrire des expressions régulières compactes, c'est comme utiliser des noms de variables courts pour accélérer un programme. Cela n'aide que si votre compilateur est mort de cervelle.
la source
Une chose intéressante à noter de votre liste d'orthographes potentiels est qu'il n'y a que 3 valeurs Soundex pour la liste contenue (si vous ignorez la valeur aberrante 'Kazzafi')
G310, K310, Q310
Maintenant, il y a des faux positifs là-dedans ('Godby' est aussi G310), mais en combinant également les hits limités du métaphone, vous pouvez les éliminer.
Quelques ajustements, et disons une translittération cyrillique, et vous aurez une solution assez robuste.
la source
Utilisation du module CPAN Regexp :: Assemble :
Cela produit l'expression régulière suivante:
la source
Je pense que vous avez trop compliqué les choses ici. L'expression correcte est aussi simple que:
Il correspond à la concaténation des sept points de code Unicode arabes qui forment le mot القذافي (c'est-à-dire Gadaffi).
la source
Si vous voulez éviter de faire correspondre des choses que personne n'a utilisées (c'est-à-dire éviter de tendre vers ". +"), Votre meilleure approche serait de créer une expression régulière qui n'est que toutes les alternatives (par exemple (Qadafi | Kadafi | ...) ), puis compilez-le en DFA, puis reconvertissez-le en une expression régulière. En supposant une implémentation modérément raisonnable qui vous donnerait une expression régulière "compressée" qui est garantie de ne pas contenir de variantes inattendues.
la source
Si vous avez une liste concrète des 30 possibilités, il vous suffit de les concaténer avec un tas de "or". Ensuite, vous pouvez être sûr qu'il ne correspond qu'aux éléments exacts que vous avez répertoriés, et pas plus. Votre moteur RE sera probablement en mesure d'optimiser davantage et, bien, avec 30 choix même si ce n'est pas le cas, ce n'est toujours pas un gros problème. Essayer de jouer avec le transformer manuellement en un RE "intelligent" ne peut pas se révéler mieux et peut se révéler pire.
la source
Certainement pas la version la plus optimisée, divisée en syllabes pour maximiser les correspondances tout en essayant de ne pas obtenir de faux positifs.
la source
Eh bien, puisque vous faites correspondre de petits mots, pourquoi n'essayez-vous pas un moteur de recherche de similitude avec la distance Levenshtein ? Vous pouvez autoriser au plus k insertions ou suppressions. De cette façon, vous pouvez changer la fonction de distance pour d'autres choses qui fonctionnent mieux pour votre problème spécifique. De nombreuses fonctions sont disponibles dans la bibliothèque simMetrics.
la source
Une alternative possible est l'outil en ligne pour générer des expressions régulières à partir d'exemples http://regex.inginf.units.it . Donnez-lui une chance!
la source
Pourquoi ne pas faire une approche mixte? Quelque chose entre une liste de toutes les possibilités et une Regex compliquée qui correspond beaucoup trop.
Regex concerne la correspondance de modèles et je ne vois pas de modèle pour toutes les variantes de la liste. En essayant de le faire, vous trouverez également des choses comme "Gazzafy" ou "Quud'haffi" qui ne sont probablement pas une variante utilisée et qui ne figurent définitivement pas sur la liste.
Mais je peux voir des modèles pour certaines des variantes, et je me suis donc retrouvé avec ceci:
Au début, j'énumère ceux où je ne vois pas de motif, puis quelques variantes où il y a des motifs.
Voir ici sur www.rubular.com
la source
\b
n'êtes inclus que dans la première et la dernière alternative.Je sais que c'est une vieille question, mais ...
Aucun de ces deux regex n'est le plus joli, mais ils sont optimisés et tous les deux correspondent à TOUTES les variations dans le message d'origine.
"Petite beauté" # 1
"Petite beauté" # 2
Repose en paix, Mouammar.
la source
Juste un addendum: vous devez ajouter "Gheddafi" comme orthographe alternative. Donc, le RE devrait être
la source
En pièces détachées:
Remarque: Je voulais juste donner un coup de feu à cela.
la source
Quoi d'autre commence par Q, G ou K, a ad, z ou t au milieu, et se termine par "fi" que les gens recherchent réellement ?
Terminé.
Intéressant que je reçois des votes négatifs. Quelqu'un peut-il laisser des faux positifs dans les commentaires?
la source
kartografi kryptografi Gaddafi Qaddafi gadafi gaddafi katastloofi katastorfi katastrofi khadaffi kadafi kardiyografi gaskromatografi kardiografi kinematografi kromatografi krystallografi kulturgeografi gandolfi grizzaffi gadhafi kadaffi kaddafi khaddafi qaddafi qadhafi quedaffi gordonsCHsKFI
. Certains d'entre eux ne sont cependant pas de faux positifs.[iy]
lieu de simplementi
:gelatinify gentrify ghostlify giddify gladify goutify gratify "Gyula Dessewffy" katasrofy katastrofy khadafy quantify quasi-deify quizzify