Я пытаюсь создать шаблон регулярного выражения, который разделит строку на массив слов на основе множества различных шаблонов и соглашений.Правила следующие:
- Он должен разбивать строку по всем тире, пробелам, подчеркиваниям и периодам.
- Когда несколько из вышеупомянутых символов отображаются вместе, он должен толькоразделить один раз (поэтому '-. quick' должен быть разделен на ['the', 'quick'], а не ['the', '', '', 'quick'])
- Должен быть разделенстрока с новыми заглавными буквами, при этом эта буква с соответствующим словом ('theQuickBrown' разделяется на ['', 'quick', 'brown']
- Она должна сгруппировать несколько заглавных букв в строке вместе('LETS_GO' должен быть разделен на ['let', 'go'], а не ['l', 'e', 't', 's', 'g', 'o'])
- Он должен использовать только строчные буквы в массиве split.
Если он работает правильно, следующее должно быть верно
"theQuick--brown_fox JumpsOver___the.lazy DOG".split_words ==
["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
До сих пор я был в состоянии получить почтитам, с единственной проблемой в том, что он разделяется на каждую заглавную, поэтому "DOG" .split_words это ["d", "o", "g"], а не ["dog"]
Я также используюкомбинация регулярных выражений и карт / филв разделенном массиве, чтобы найти решение, бонусные баллы, если вы можете сказать мне, как избавиться от этого и использовать только регулярное выражение.
Вот что у меня есть:
class String
def split_words
split(/[_,\-, ,.]|(?=[A-Z]+)/).
map(&:downcase).
reject(&:empty?)
end
end
Который при вызове строки из вышеприведенного теста возвращает:
["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "d", "o", "g"]
Как я могу обновить этот метод, чтобы он соответствовал всем вышеперечисленным спецификациям?