Как вывести слова как указано в примере ниже, и как одинаковые слова выводить в одну строку как в примере?
Задание: Напишите регулярное выражение, которое позволяет выделить все строки, отвечающие условиям:
- Состоят только из букв
- Одна и только одна из букв является заглавной
Пример вывода:
"Мама",
"авТо",
"гриБ",
'Яблоко', 'яБлоко', 'ябЛоко', 'яблОко', 'яблоКо', 'яблокО'
Решение:
arr = ["Три богатыря", "Мама", "авТо", "гриБ", "Яблоко", "Focus 12", "агент007", "стриж", "ГТО", "Три богатыря", "234", "яБлоко", "Focus13", "Zero", "this", "Men", "TESLA"]
for x in arr:
c = re.findall(r"(^[а-яёa-z]*[А-ЯЁA-Z][а-яёa-z]*)$", x)
print(*c, end=",")
Вывод:
,Мама,авТо,гриБ,Яблоко,,,,,,,яБлоко,,Zero,,Men,,
Ответы (3 шт):
Автор решения: ionchik
→ Ссылка
import re
arr = ["Три богатыря", "МаVа", "авТо", "гриБ", "Яблоко", "Focus 12", "агент007", "стриж", "ГТО", "Три богатыря", "234", "яБлоко", "Focus13", "Zero", "this", "Men", "TESLA"]
print(*list(filter(lambda x: len(re.findall(r"[А-ЯЁA-Z]", x)) <= 1, arr)), sep=", ")
Если я правильно понял, то Вам нужно что-то такое
Автор решения: Алексей Р
→ Ссылка
Нужные элементы можно найти с помощью регулярного выражения [а-яёa-z]*[А-ЯЁA-Z][а-яёa-z]* и метода re.fullmatch(), а сгруппировать найденные одинаковые слова с помощью словаря. Для формирования требуемого вывода можно использовать join().
import re
arr = ["Три богатыря", "МаVа", "авТо", "гриБ", "Яблоко", "Focus 12", "агент007", "стриж", "ГТО", "Три богатыря", "234",
"яБлоко", "Focus13", "Zero", "this", "Men", "TESLA"]
pat = re.compile(r'[а-яёa-z]*[А-ЯЁA-Z][а-яёa-z]*')
d = {}
for s in arr:
x = re.fullmatch(pat, s)
if x is not None:
d.setdefault(s.lower(), []).append(s)
print(',\n'.join(','.join(v) for v in d.values()))
авТо,
гриБ,
Яблоко,яБлоко,
Zero,
Men
Автор решения: SergFSM
→ Ссылка
можно еще попробовать группировку:
from re import fullmatch
from itertools import groupby
arr = ["Три богатыря", "Мама", "авТо", "гриБ", "Яблоко", "Focus 12", "агент007", "стриж", "ГТО", "Три богатыря", "234", "яБлоко", "Focus13", "Zero", "this", "Men", "TESLA"]
c = [x for x in arr if fullmatch(r"(^[а-яёa-z]*[А-ЯЁA-Z][а-яёa-z]*)$", x)]
print(*[', '.join(g) for _,g in groupby(sorted(c, key=str.lower), key=str.lower)], sep='\n')
>>>
'''
Men
Zero
авТо
гриБ
Мама
Яблоко, яБлоко