Как вывести слова как указано в примере ниже, и как одинаковые слова выводить в одну строку как в примере?

Задание: Напишите регулярное выражение, которое позволяет выделить все строки, отвечающие условиям:

  • Состоят только из букв
  • Одна и только одна из букв является заглавной

Пример вывода:

"Мама",

"авТо",

"гриБ",

'Яблоко', 'яБлоко', 'ябЛоко', 'яблОко', 'яблоКо', 'яблокО'

Решение:

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
авТо
гриБ
Мама
Яблоко, яБлоко
→ Ссылка