Использование re.match () для исправления заглавных букв - PullRequest
0 голосов
/ 31 марта 2019

Я не получаю желаемый результат для конкретной проблемы, которую пытаюсь попробовать на веб-сайте. Вот проблема:

Давайте рассмотрим, что слово было набрано клавишей Caps Lock случайно включен, если:

либо содержит только заглавные буквы; или все буквы, кроме первый из них в верхнем регистре. В этом случае мы должны автоматически изменить регистр всех букв. Например, регистр букв слова формы "HELLO", "HTTP", "z" должны быть изменены.

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

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

import re
word = input()
exp = r'[a-z]+[A-Z]+'
exp2 = r'[A-Z]+'
if bool(re.match(word, exp)) or bool(re.match(word, exp2)):
    print(word[0].upper() + word[1:].lower())
else:
    print(word)
Input:CAPS
Desired output: Caps
Current output: CAPS

Input:cAPS
Desired output: Caps
Current output: cAPS

Input:cAPSlOCK
Desired output:cAPSlOCK
Current output: cAPSlOCK

1 Ответ

3 голосов
/ 31 марта 2019

Первое регулярное выражение: r'[a-z]+[A-Z]+' соответствует строке, начинающейся с одной или нескольких строчных букв, за которыми следуют одна или несколько заглавных букв.

Второе регулярное выражение r'[A-Z]+' соответствует строке, начинающейся с одной или нескольких заглавных букв.

Вы можете объединить их в: r'[a-z]?[A-Z]+', что соответствует строке, начинающейся с 0 или 1 строчной буквы, за которой следует одна или несколько заглавных букв.

Во-вторых, порядок параметров при вызове re.match() неправильный. Первый параметр должен быть регулярным выражением, второй должен быть строкой: re.match(exp,word)

Рабочая реализация:

import re

word = input()
exp = r'[a-z]?[A-Z]+'
if bool(re.match(exp,word)):
    print(word[0].upper() + word[1:].lower())
else:
    print(word)

Демо: https://repl.it/@glhr/55438600

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...