Estoy tratando de buscar la palabra Gadaffi. ¿Cuál es la mejor expresión regular para buscar esto?
Mi mejor intento hasta ahora es:
\b[KG]h?add?af?fi$\b
Pero todavía parece que me faltan algunas revistas. ¿Alguna sugerencia?
Actualización: encontré una lista bastante extensa aquí: http://blogs.abcnews.com/theworldnewser/2009/09/how-many-different-ways-can-you-spell-gaddafi.html
La respuesta a continuación coincide con las 30 variantes:
Gadaffi Gadafi Gadafy Gadafi Gaddafy Gadafi Gadafi Gathafi Ghadaffi Gadafi Gadafi Gadada Gadafi Kadaffi Kadafi Gadafi Gadafi Kazzafi Khadaffy Khadafy Khaddafi Qadafi Gadafi Gadafi Gadafi Gadafi Gatafi Quathafi Qudhafi Gadafi
.+
ser la única expresión regular válida.Respuestas:
\b[KGQ]h?add?h?af?fi\b
La transcripción en árabe es (Wiki dice) "Qaḏḏāfī", así que quizás agregue una Q. Y una H ("Gadhafi", como menciona el artículo (ver más abajo)).
Por cierto, ¿por qué hay un
$
al final de la expresión regular?Por cierto, buen artículo sobre el tema:
Gadafi, Kadafi o Gadafi? ¿Por qué el nombre del líder libio se deletrea de muchas maneras diferentes? .
EDITAR
Para hacer coincidir todos los nombres en el artículo que mencionó más adelante , esto debería coincidir con todos. Esperemos que no coincida con muchas otras cosas: D
fuente
d
También coincide con un ḏ?Qaḏḏāfī
, la expresión regular también debería verificarQaddafi
. Si también desea buscar la transcripción árabe, solo busque esa; no creo que haya más variantes de la transcripción árabe, solo de las transcripciones en inglés.?
lugar de letras). Sin embargo, podría ser una exageración.Fácil ...
(Qadaffi|Khadafy|Qadafi|
...)
... está auto documentado, se puede mantener, y suponiendo que su motor regexp realmente compila expresiones regulares (en lugar de interpretarlas), se compilará en el mismo DFA que una solución más ofuscada.Escribir expresiones regulares compactas es como usar nombres de variables cortos para acelerar un programa. Solo ayuda si tu compilador tiene muerte cerebral.
fuente
Una cosa interesante de su lista de posibles deletreos es que solo hay 3 valores Soundex para la lista contenida (si ignora el 'Kazzafi' atípico)
G310, K310, Q310
Ahora, hay falsos positivos allí ('Godby' también es G310), pero al combinar también los golpes limitados de metafonía, puede eliminarlos.
Algunos ajustes, y digamos alguna transcripción cirílica, y tendrás una solución bastante robusta.
fuente
Usando el módulo CPAN Regexp :: Assemble :
Esto produce la siguiente expresión regular:
fuente
Creo que has terminado de complicar las cosas aquí. La expresión regular correcta es tan simple como:
Coincide con la concatenación de los siete puntos de código Unicode en árabe que forman la palabra القذافي (es decir, Gadaffi).
fuente
Si desea evitar combinar cosas que nadie ha usado (es decir, evitar tender hacia ". +"), Su mejor enfoque sería crear una expresión regular que sea solo todas las alternativas (por ejemplo, (Qadafi | Kadafi | ...) ) luego compile eso en un DFA, y luego convierta el DFA nuevamente en una expresión regular. Asumiendo una implementación moderadamente sensata que le daría una expresión regular "comprimida" que garantiza que no contiene variantes inesperadas.
fuente
Si tienes una lista concreta de las 30 posibilidades, solo concatena todas con un grupo de "ors". Entonces puede estar seguro de que solo coincide con las cosas exactas que ha enumerado, y no más. Su motor RE probablemente podrá optimizar aún más y, bueno, con 30 opciones, incluso si no es así, no es un gran problema. Intentar jugar un poco con convertirlo manualmente en un RE "inteligente" no puede resultar mejor y puede resultar peor.
fuente
Ciertamente no es la versión más optimizada, dividida en sílabas para maximizar las coincidencias mientras tratamos de asegurarnos de que no obtengamos falsos positivos.
fuente
Bueno, ya que estás haciendo coincidir palabras pequeñas, ¿por qué no pruebas un motor de búsqueda de similitud con la distancia de Levenshtein ? Puede permitir a lo sumo k inserciones o eliminaciones. De esta manera, puede cambiar la función de distancia a otras cosas que funcionen mejor para su problema específico. Hay muchas funciones disponibles en la biblioteca simMetrics.
fuente
Una posible alternativa es la herramienta en línea para generar expresiones regulares a partir de ejemplos http://regex.inginf.units.it . ¡Dame una oportunidad!
fuente
¿Por qué no hacer un enfoque mixto? Algo entre una lista de todas las posibilidades y un Regex complicado que coincide demasiado.
Regex trata sobre la coincidencia de patrones y no puedo ver un patrón para todas las variantes en la lista. Al intentar hacerlo, también encontrará cosas como "Gazzafy" o "Quud'haffi", que probablemente no sean una variante usada y definitivamente no están en la lista.
Pero puedo ver patrones para algunas de las variantes, y así terminé con esto:
Al principio, enumero aquellos en los que no puedo ver un patrón, luego me siguen algunas variantes donde hay patrones.
Véalo aquí en www.rubular.com
fuente
\b
única se incluyen en el primero y las últimas alternativas.Sé que esta es una vieja pregunta, pero ...
Ninguna de estas dos expresiones regulares es la más bonita, pero están optimizadas y ambas coinciden con TODAS las variaciones en la publicación original.
"Pequeña belleza" # 1
"Pequeña belleza" # 2
Descansa en paz, Muammar.
fuente
Solo un apéndice: debe agregar "Gheddafi" como ortografía alternativa. Entonces el RE debería ser
fuente
En partes:
Nota: Solo quería darle una oportunidad a esto.
fuente
¿Qué más comienza con Q, G o K, tiene ad, z o t en el medio y termina en "fi" que la gente realmente busca?
Hecho.
Interesante que me voten negativamente. ¿Alguien puede dejar algunos falsos positivos en los comentarios?
fuente
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
. Sin embargo, algunos de esos no son falsos positivos.[iy]
lugar de soloi
:gelatinify gentrify ghostlify giddify gladify goutify gratify "Gyula Dessewffy" katasrofy katastrofy khadafy quantify quasi-deify quizzify