Próbuję wyszukać słowo Gadaffi. Jakie jest najlepsze wyrażenie regularne do wyszukiwania?
Jak dotąd moja najlepsza próba to:
\b[KG]h?add?af?fi$\b
Ale nadal wydaje mi się, że brakuje mi niektórych czasopism. Jakieś sugestie?
Aktualizacja: Znalazłem dość obszerną listę tutaj: http://blogs.abcnews.com/theworldnewser/2009/09/how-many-different-ways-can-you-spell-gaddafi.html
Poniższa odpowiedź pasuje do wszystkich 30 wariantów:
Gadaffi Kadafi Gadafij Kadafi Kadafi Kaddafiego Kaddafiego Gathafi Ghadaffi Ghadafi Ghaddafi Ghaddafy Gheddafi Kadaffi Kadafi Kadafi Kaddafi Kazzafi Khadaffy Khadafy Khaddafi Kadafi Kadafi Kaddafi Kaddafi Kadafi Qathafi Quathafi Qudhafi Kad'afi
.+
bycia jedynym ważnym wyrażeniem regularnym.Odpowiedzi:
\b[KGQ]h?add?h?af?fi\b
Arabska transkrypcja to (mówi Wiki) „Qaḏḏāfī”, więc może dodać Q. I jeden H („Gadhafi”, jak wspomniano w artykule (patrz poniżej)).
Przy okazji, dlaczego jest
$
na końcu wyrażenia regularnego?Przy okazji fajny artykuł na ten temat:
Kadafi, Kadafi czy Kadafi? Dlaczego imię lidera Libii jest pisane na tak wiele różnych sposobów? .
EDYTOWAĆ
Aby dopasować wszystkie nazwy w artykule, o którym wspominałeś później , powinno to być zgodne dla wszystkich. Miejmy nadzieję, że nie będzie pasować do wielu innych rzeczy: D
źródło
d
pasuje również do ḏ?Qaḏḏāfī
, regex też powinien to sprawdzićQaddafi
. Jeśli chcesz też poszukać arabskiej transkrypcji, po prostu poszukaj jej - nie sądzę, żeby było więcej wariantów arabskiej transkrypcji, tylko angielskich.?
literami zamiast zamiast). Może to być przesada.Łatwo
(Qadaffi|Khadafy|Qadafi|
...)
... jest to samo udokumentowane, utrzymaniu, a przy założeniu, że silnik regexp faktycznie kompiluje wyrażenia regularne (zamiast je interpretować), skompiluje się do tego samego DFA, co rozwiązanie bardziej zaciemnione.Pisanie kompaktowych wyrażeń regularnych przypomina używanie krótkich nazw zmiennych w celu przyspieszenia programu. Pomaga to tylko wtedy, gdy twój kompilator jest martwy.
źródło
Jedną z interesujących rzeczy na liście potencjalnych pisowni jest to, że dla zawartej listy są tylko 3 wartości Soundex (jeśli zignorujesz wartość odstającą „Kazzafi”)
G310, K310, Q310
Teraz są tam fałszywe alarmy („Godby” to także G310), ale łącząc również ograniczone trafienia metafonowe, możesz je wyeliminować.
Kilka drobnych poprawek i powiedzmy trochę cyrylicy, a otrzymasz dość solidne rozwiązanie.
źródło
Korzystanie z modułu CPAN Regexp :: Assemble :
Daje to następujące wyrażenie regularne:
źródło
Myślę, że przesadzasz. Prawidłowe wyrażenie regularne jest tak proste, jak:
Odpowiada konkatenacji siedmiu punktów kodu Unicode arabskiego, które tworzą słowo القذافي (tj. Gadaffi).
źródło
Jeśli chcesz uniknąć dopasowywania rzeczy, których nikt nie użył (tj. Unikaj tendencji do „. +”), Najlepszym rozwiązaniem byłoby utworzenie wyrażenia regularnego zawierającego tylko wszystkie alternatywy (np. (Qadafi | Kadafi | ...) ), a następnie skompiluj to w DFA, a następnie przekonwertuj DFA z powrotem na wyrażenie regularne. Zakładając umiarkowanie sensowną implementację, która dałaby ci „skompresowane” wyrażenie regularne, które z pewnością nie zawiera nieoczekiwanych wariantów.
źródło
Jeśli masz konkretną listę wszystkich 30 możliwości, po prostu połącz je wszystkie z kilkoma „orami”. Dzięki temu możesz mieć pewność , że pasuje ono tylko do dokładnie wymienionych rzeczy, i nic więcej. Twój silnik RE prawdopodobnie będzie w stanie dalej optymalizować i, no cóż, z 30 wyborami, nawet jeśli nie, to nadal nie jest wielka sprawa. Próba manipulacji z ręcznym przekształceniem go w „sprytną” RE nie może być lepsza i może okazać się gorsza.
źródło
Z pewnością nie jest to najbardziej zoptymalizowana wersja, podzielona na sylaby, aby zmaksymalizować dopasowania, jednocześnie starając się nie dopuścić do fałszywych trafień.
źródło
Skoro dopasowujesz małe słowa, dlaczego nie wypróbować wyszukiwarki podobieństwa z odległością Levenshteina ? Możesz zezwolić na maksymalnie k wstawiania lub usuwania. W ten sposób możesz zmienić funkcję odległości na inne, które działają lepiej w przypadku konkretnego problemu. W bibliotece simMetrics dostępnych jest wiele funkcji.
źródło
Możliwą alternatywą jest internetowe narzędzie do generowania wyrażeń regularnych z przykładów http://regex.inginf.units.it . Daj temu szansę!
źródło
Dlaczego nie zastosować podejścia mieszanego? Coś między listą wszystkich możliwości a skomplikowanym Regexem, który pasuje zbyt wiele.
Regex dotyczy dopasowywania wzorów i nie widzę wzoru dla wszystkich wariantów na liście. Próbując to zrobić, znajdziesz również takie rzeczy jak „Gazzafy” lub „Quud'haffi”, które najprawdopodobniej nie są używanym wariantem i zdecydowanie nie są na liście.
Ale widzę wzory dla niektórych wariantów, więc skończyłem z tym:
Na początku wymieniam te, w których nie widzę wzoru, a następnie kilka wariantów, w których są wzory.
Zobacz tutaj na www.rubular.com
źródło
\b
są uwzględnione tylko w pierwszej i ostatniej alternatywie.Wiem, że to stare pytanie, ale ...
Żadne z tych dwóch wyrażeń regularnych nie jest najładniejsze, ale są one zoptymalizowane i oba pasują do WSZYSTKICH odmian oryginalnego postu.
„Mała piękność” nr 1
„Mała piękność” # 2
Spoczywaj w pokoju, Muammar.
źródło
Tylko dodatek: należy dodać „Gheddafi” jako alternatywną pisownię. Tak powinno być RE
źródło
W częściach:
Uwaga: Chciałem tylko spróbować.
źródło
Co jeszcze zaczyna się od Q, G lub K, ma reklamę, z lub t w środku, a kończy na „fi”, którego ludzie naprawdę szukają?
Gotowy.
Ciekawe, że jestem doceniany. Czy ktoś może zostawić w komentarzach fałszywe alarmy?
źródło
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
. Niektóre z nich nie są jednak fałszywie pozytywne.[iy]
zamiast po prostui
:gelatinify gentrify ghostlify giddify gladify goutify gratify "Gyula Dessewffy" katasrofy katastrofy khadafy quantify quasi-deify quizzify