Ханука, Ханука, Ханука ... Из-за транслитерации с другого языка и набора символов существует множество способов написания названия этого праздника. Сколько допустимых вариантов написания вы можете придумать?
Теперь напишите регулярное выражение, которое распознает их всех.
Вероятно, есть значок за то, что вопрос длился двенадцать лет, прежде чем был закрыт. И я пропустил его на двенадцать дней!
@gbarry даже не 12 лет





Попробуй это:
/^[ck]?hann?ukk?ah?$/i
А как насчет середины строки?
Я думаю, что единственными разрешенными вариантами написания на английском языке являются Hanukkah и Chanukh, так что это что-то вроде
/(Ch|H)anuk?kah/
Или, может быть, даже лучше
/(Chanukah|Hanukkah)/
Я видел полдюжины широко используемых. Если вы хотите быть «Правильным», вам следует использовать еврейские буквы חנוכה, конечно, для людей, которые не умеют читать на иврите, это менее полезно.
Назовите меня лохом по удобочитаемости.
В Python:
def find_hanukkah(s):
import re
spellings = ['hannukah', 'channukah', 'hanukkah'] # etc...
for m in re.finditer('|'.join(spellings), s, re.I):
print m.group()
find_hanukkah("Hannukah Channukah, Hanukkah")
Я предпочитаю регулярные выражения. Такие вещи не масштабируются. В какой-то момент вам нужно сломаться и просто использовать регулярное выражение!
Ваше регулярное выражение все равно должно будет кодировать все принятые варианты написания ханука. Моя версия проясняет, что является приемлемым, а что - недопустимым. Кроме того, добавление еще одного написания в мой код тривиально, но регулярное выражение может стать полностью недействительным с помощью одного дополнительного написания.
Согласно http://www.holidays.net/chanukah/spelling.htm, его можно записать любым из следующих способов:
Chanuka
Chanukah
Chanukkah
Channukah
Hanukah
Hannukah
Hanukkah
Hanuka
Hanukka
Hanaka
Haneka
Hanika
Khanukkah
Вот мое регулярное выражение, которое соответствует всем им:
/(Ch|H|Kh)ann?[aeiu]kk?ah?/
Редактировать: Или так, без веток:
/[CHK]h?ann?[aeiu]kk?ah?/
К сожалению, он также подходит для таких строк, как Khannekkah.
Reg exp, вероятно, не лучшее решение для проверки орфографии.
Да, но я думаю, что в большинстве случаев любая строка, которой она соответствует, которой нет в списке, является просто ошибкой в написании слова (если это слово может быть написано с ошибкой) и должна быть сопоставлена в любом случае.
Я думаю, что регулярное выражение должно соответствовать только тому, чему оно должно соответствовать.
Я воспринял это просто как загадку.
На сайте, на который я ссылался, говорится, что нет точного английского перевода этого слова ... здесь перечислены только некоторые распространенные варианты написания. Я думаю, что почти каждое слово, которое соответствует этому регулярному выражению, является допустимым способом написания этого слова.
С каких это пор ложные срабатывания не аннулируют регулярное выражение? Я чувствую себя как в сумеречной зоне.
Все «ложные срабатывания» - это все еще способы написания этого слова. Этот список не является полным списком написаний. (Прочтите мой последний комментарий)
Не думаю, что вы поняли суть моих последних парных комментариев ... «Ханнекка» - правильное написание, даже если его никто не использует. Важно только то, что оно звучит близко к оригинальному слову на иврите.
Это самый короткий, который я мог придумать, чтобы соответствовать и соответствовать только перечисленным случаям: (Ch|H)an(nu|uk|u)kah|(Hanuk|Chanu|Han(u|a|e|i))ka|Khanukkah Khanukkah - странный шар, потому что он заканчивается h, но имеет только вариант с двойным k и одинарным n. Остальное можно объединить в два различных паттерна: Ханука | Ханука | Ханука | Ханука | Ханука | Ханука = (Ch|H)an(nu|uk|u)kah Ханука | Ханука | Ханука | Ханака | Ханека | Ханика = (Hanuk|Chanu|Han(u|a|e|i))ka
Мне нравится ответ Триптиха, но я бы сделал его на шаг вперед ... также в python:
def valid(spelling):
import re
regex_spelling = re.compile(r'^[cCkK]{0,1}han{1,2}uk{1,2}ah$')
valid = regex_spelling.match(spelling)
if valid:
print 'Valid spelling'
else:
print spelling, " is not a spelling for the word"
использовать это:
valid("hanukkah")
Этот ответ произвел бы на меня большее впечатление, если бы не импорт внутри функции ...
Что-то вроде C? Hann? Uk? Kah? соответствует большинству распространенных случаев. Также существует куча странных вариантов написания C? Hann? Uk? Kah? | Han [aei] ka | Khanukkah соответствует почти каждому написанию, которое я мог придумать (это было как минимум полмиллиона просмотров в Google).
((Ch|H|X|Х|Kh|J)[aа](н|n{1,2})(у|ou|[auei])(к|k|q){1,2}[aа]h?)|(חנו?כה)
Это регулярное выражение гораздо более инклюзивное и охватывает все следующие параметры:
Чаннука Ханука Чаннукка Ханука Ханука Ханука Ханука Ханукка Ханука Ханука Ханака Ханека Ханика Ханнука Ханука Ханнукка Ханука Hanoukka Ханука Ханука Ханукка Ханука Янука Ханука Xanuka Ханука Ханука חנוכה חנכה
Аналогичный вопрос: stackoverflow.com/questions/5365283/…