Как найти все слова, которые имеют только одну Заглавную букву в строке и не имеют числа?
Нужна помощь с решением регулярных выражений.
Задача проста, нужно найти все слова, которые имеют только одну Заглавную букву в строке и не имеют числа.
Я пытался что-то вроде такого сделать, но безуспешно:
import re
pattern = r"\b\w[а-яА-ЯёЁ]\w+(?![0-9])\b"
result = re.findall(pattern, 'Яблоко яБлоко ябЛоко яблОко яблоКо яблокО яблоко7 яблоко')
print(result)
Я очень плохо понимаю как устроены регулярные выражения. Помогите решить задачу и объясните мне потом, пожалуйста, почему именно так нужно сделать.
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Если вы хотите использовать регулярные выражения, установите библиотеку PyPi regex с помощью pip install regex используйте
import regex
pattern = r"\b\p{Ll}*\p{Lu}\p{Ll}*\b"
text = 'Яблоко яБлоко ябЛоко яблОко яблоКо яблокО яблоко7 яблоко'
result = regex.findall(pattern, text)
print(result)
# => ['Яблоко', 'яБлоко', 'ябЛоко', 'яблОко', 'яблоКо', 'яблокО']
Если регулярные выражения использовать необязательно, вы можете использовать
import re, sys
uc_letters = [chr(i) for i in range(sys.maxunicode) if chr(i).isupper()]
text = 'Яблоко яБлоко ябЛоко яблОко яблоКо яблокО яблоко7 яблоко'
print( [slovo for slovo in text.split() if all(c.isalpha() for c in slovo) and len([c for c in slovo if c in uc_letters]) == 1 ] )
# => ['Яблоко', 'яБлоко', 'ябЛоко', 'яблОко', 'яблоКо', 'яблокО']
См. пример кода.
Подробности:
uc_letters- список всех заглавных букв Юникода[slovo for slovo in text.split()...- разбивает строку на слова по пробельным символам, а затем оставляет только те, которыеif all(c.isalpha() for c in slovo) and...состоят целиком из букв иlen([c for c in slovo if c in uc_letters]) == 1 ]в которых имеется только одна заглавная буква.