Estou tentando procurar a palavra Gadaffi. Qual é a melhor expressão regular para pesquisar isso?
Minha melhor tentativa até agora é:
\b[KG]h?add?af?fi$\b
Mas parece que ainda estou perdendo algumas revistas. Alguma sugestão?
Atualização: Encontrei uma lista bastante extensa aqui: http://blogs.abcnews.com/theworldnewser/2009/09/how-many-different-ways-can-you-spell-gaddafi.html
A resposta abaixo corresponde a todas as 30 variantes:
Gadaffi Gadafi Gadafy Kadafi Gaddafy Gaddhafi Kadafi Gathafi Ghadaffi Ghadafi Ghaddafi Ghaddafy Gheddafi Kadaffi Kadafi Kaddafi Kadhafi Kazzafi Khadaffy Khadafy Khaddafi Qadafi Qaddafi Qadhafi Qadhdhafi Qadthafi Qathafi Quathafi Qudhafi Kad'afi
.+
ser a única expressão regular válida.Respostas:
\b[KGQ]h?add?h?af?fi\b
A transcrição para o árabe é (diz a Wiki) "Qaḏḏāfī", então talvez adicione um Q. E um H ("Gadhafi", como o artigo (veja abaixo) menciona).
Btw, por que existe um
$
no final do regex?Btw, bom artigo sobre o tema:
Kadafi, Kadafi ou Qaddafi? Por que o nome do líder líbio está escrito de tantas maneiras diferentes? .
EDITAR
Para corresponder a todos os nomes no artigo que você mencionou mais tarde , isso deve corresponder a todos eles. Vamos apenas torcer para que não corresponda a muitas outras coisas: D
fonte
d
também corresponder a um d?Qaḏḏāfī
, o regex deve procurarQaddafi
também. Se você quiser procurar também a transcrição em árabe, procure por essa - não acho que haja mais variantes da transcrição em árabe, apenas das transcrições em inglês.?
letras em vez de). Pode ser um exagero embora.Fácil ...
(Qadaffi|Khadafy|Qadafi|
...)
... é auto-documentado, pode ser mantido e, assumindo que o mecanismo regexp realmente compila expressões regulares (em vez de interpretá-las), ele será compilado no mesmo DFA que uma solução mais ofuscada faria.Escrever expressões regulares compactas é como usar nomes curtos de variáveis para acelerar um programa. Isso só ajuda se o seu compilador estiver com morte cerebral.
fonte
Uma coisa interessante a ser observada em sua lista de ortografia em potencial é que existem apenas 3 valores Soundex para a lista contida (se você ignorar o "Kazzafi").
G310, K310, Q310
Agora, existem falsos positivos ('Godby' também é G310), mas combinando os hits limitados do metafone, você também pode eliminá-los.
Alguns ajustes e, digamos, transliteração cirílica, e você terá uma solução bastante robusta.
fonte
Usando o módulo CPAN Regexp :: Assemble :
Isso produz a seguinte expressão regular:
fonte
Eu acho que você acabou complicando as coisas aqui. O regex correto é tão simples quanto:
Corresponde à concatenação dos sete pontos de código Unicode em árabe que formam a palavra القذافي (ou seja, Gadaffi).
fonte
Se você deseja evitar a correspondência de coisas que ninguém usou (por exemplo, evitar tender para ". +"), Sua melhor abordagem seria criar uma expressão regular que seja apenas todas as alternativas (por exemplo, (Qadafi | Kadafi | ...) ), compile-o em um DFA e converta-o novamente em uma expressão regular. Supondo uma implementação moderadamente sensata que daria a você uma expressão regular "compactada", garantida para não conter variantes inesperadas.
fonte
Se você tem uma lista concreta de todas as 30 possibilidades, basta concatená-las todas juntas com vários "ors". Então, você pode ter certeza de que corresponde apenas às coisas exatas listadas e não mais. Seu mecanismo de ER provavelmente será capaz de otimizar ainda mais e, bem, com 30 opções, mesmo que não o faça, ainda não é grande coisa. Tentar mexer manualmente transformando-o em um ER "inteligente" não pode ser melhor e pior.
fonte
Certamente não é a versão mais otimizada, divida em sílabas para maximizar as correspondências enquanto tenta garantir que não obtemos falsos positivos.
fonte
Bem, como você está combinando pequenas palavras, por que você não tenta um mecanismo de pesquisa de similaridade com a distância de Levenshtein ? Você pode permitir no máximo k inserções ou exclusões. Dessa forma, você pode alterar a função de distância para outras coisas que funcionam melhor para o seu problema específico. Existem muitas funções disponíveis na biblioteca simMetrics.
fonte
Uma alternativa possível é a ferramenta online para gerar expressões regulares a partir de exemplos http://regex.inginf.units.it . Dar uma chance!
fonte
Por que não fazer uma abordagem mista? Algo entre uma lista de todas as possibilidades e um Regex complicado que corresponde demais.
Regex é sobre correspondência de padrões e não consigo ver um padrão para todas as variantes na lista. Ao tentar fazer isso, também encontrará coisas como "Gazzafy" ou "Quud'haffi" que provavelmente não são uma variante usada e definitivamente não estão na lista.
Mas eu posso ver padrões para algumas das variantes e acabei com isso:
No começo, listo aqueles em que não consigo ver um padrão e, em seguida, seguimos algumas variantes onde existem padrões.
Veja aqui em www.rubular.com
fonte
\b
está incluído apenas na primeira e na última alternativa.Eu sei que esta é uma pergunta antiga, mas ...
Nenhuma dessas duas regexes é a mais bonita, mas elas são otimizadas e ambas correspondem a TODAS as variações da postagem original.
"Pequena Beleza" # 1
"Pequena Beleza" # 2
Descanse em paz, Muammar.
fonte
Apenas um adendo: você deve adicionar "Gheddafi" como ortografia alternativa. Portanto, a ER deve ser
fonte
Em partes:
Nota: Só queria dar uma chance a isso.
fonte
O que mais começa com Q, G ou K, tem ad, z ou t no meio e termina em "fi" que as pessoas realmente procuram?
Feito.
Interessante que estou ficando com voto negativo. Alguém pode deixar alguns falsos positivos nos comentários?
fonte
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
. Alguns deles não são falsos positivos.[iy]
vez de apenasi
:gelatinify gentrify ghostlify giddify gladify goutify gratify "Gyula Dessewffy" katasrofy katastrofy khadafy quantify quasi-deify quizzify