Какое регулярное выражение соответствует словам, содержащим все гласные? - PullRequest
0 голосов
/ 19 января 2019

Я изучаю регулярные выражения в python, но, похоже, не могу освоить его. Я пытаюсь отфильтровать все слова, содержащие все гласные в английском, и это мое регулярное выражение:

r'\b(\S*[aeiou]){5}\b'

кажется, что это слишком расплывчато, так как любой гласный (даже повторный) может появляться в любом месте, и любое количество раз - так, это бросает такие слова, как «действенные», «неудачные», которые имеют количество гласных как 5, но не все гласные Я посмотрел в Интернете и нашел это регулярное выражение:

r'[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*

Но, как оказалось, это только для последовательного появления гласных, довольно ограниченная задача, чем та, которую я пытаюсь выполнить. Может ли кто-то «придумать вслух», создавая регулярное выражение для моей проблемы?

1 Ответ

0 голосов
/ 19 января 2019

Если вы планируете сопоставлять слова как куски текста, состоящие только из английских букв, вы можете использовать регулярные выражения, например

\b(?=\w*?a)(?=\w*?e)(?=\w*?i)(?=\w*?o)(?=\w*?u)[a-zA-Z]+\b

См. Демонстрационную версию регулярных выражений

КомуПоддерживая языки, отличные от английского, вы можете заменить [a-zA-Z]+ на [^\W\d_]+.

Если «слово», которое вы хотите сопоставить, представляет собой кусок непробельных символов, которые вы можете использовать

(?<!\S)(?=\S*?a)(?=\S*?e)(?=\S*?i)(?=\S*?o)(?=\S*?u)\S+

См. Демонстрацию регулярных выражений .

Определите эти шаблоны в Python, используя необработанные строковые литералы, например:

rx_AllVowelWords = r'\b(?=\w*?a)(?=\w*?e)(?=\w*?i)(?=\w*?o)(?=\w*?u)[a-zA-Z]+\b'

Подробности

  • \b(?=\w*?a)(?=\w*?e)(?=\w*?i)(?=\w*?o)(?=\w*?u)[a-zA-Z]+\b:
    • \b - граница слова, здесь начальная граница слова
    • (?=\w*?a)(?=\w*?e)(?=\w*?i)(?=\w*?o)(?=\w*?u) - последовательность положительных взглядов, которые запускаются сразу послепозиция границы слова обнаружена и требует наличия a, e, i, o и u после любых символов 0+ (буквы, цифры, подчеркивания - вы можете заменить \w*?[^\W\d_]*? только для проверки букв)
    • [a-zA-Z]+ - 1 или более букв ASCII (заменить на [^\W\d_]+ для соответствия всем буквам)
    • \b - граница слова, здесь, конечная граница слова

Детали второго шаблона:

  • (?<!\S)(?=\S*?a)(?=\S*?e)(?=\S*?i)(?=\S*?o)(?=\S*?u)\S+:
    • (?<!\S) - позиция в начале строки или после пробела
    • (?=\S*?a)(?=\S*?e)(?=\S*?i)(?=\S*?o)(?=\S*?u) - все английские гласные должны присутствовать - в любом порядке - после любых 0+ символовкроме пробелов
    • \S+ - 1+ непробельных символов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...