Автор оригинала: Rikesh Nichani.
Проблема разработки: Как проверить, являются ли все символы строки в верхнем регистре?
Фон : Строка представляет собой последовательность символов и имеет среди наиболее часто используемых и популярных типов данных в Python. Строки могут быть заключены либо одинокими, либо двойными кавычками и являются «неизменными», то есть они не могут быть изменены после создания. Существуют различные методы, которые мы можем пройти через строку, и в этой статье мы собираемся сосредоточиться на одном, в частности: проверка, если все символы строки являются прописными.
Пример : Чтобы начать, давайте создадим два образца строки в Python:
example_1 = 'Hello, my name is Rikesh!' example_2 = 'HELLO, MY NAME IS RIK@SH48!!'
Как видите, мы открыли все наши персонажи здесь – прописные, строчные буквы, а затем некоторые специальные символы и цифры.
Метод 1: Isupper ()
Это строка Встроенный метод Используется для обработки строки в Python и возвращает логическое значение – Правда
Если все символы заглавные или Ложь
если не.
Давайте передам наши примеры через этот метод и посмотрите, что мы получаем как выход:
>>> example_1.isupper() False
Хотя наша строка содержит прописные буквы «H» и «R», возвращение ложно, что не все символы, являются прописными. Теперь давайте попробуем с нашим примером_2:
>>> example_2.isupper() True
Хотя у нас есть некоторые специальные символы и цифры, возвращение – Правда
Поскольку все наши персонажи действительно заглавные буквы. Этот метод возвращает Правда
Для пробелов, цифр и символов возвращаются только строчные буквы Ложь
Отказ
Метод 2: регеекс совпадение заглавных букв Только
Модуль Python Regex или Re позволяет нам искать и соответствовать нашему символу String Python по символу. Путь Regex определяет символы немного отличается, так как использует ASCII вместо Unicode. В то время как это не имеет никакого практического различия в нашу строку, она изменит способ поиска Regex, как это классы алфавитных символов по-разному из цифр и других специальных символов.
Есть два способа использовать модуль Regex для проверки заглавных букв. Далее мы исследуем первый.
После импорта мы можем использовать Regex для проверки нашей строки и искать только заглавные буквы. В коде ниже, [A-Z]
Набор символов Ограничивает наши критерии матча для капитализированных (заглавных) только алфавитных персонажей, в диапазоне A – Z. $
гарантирует, что мы ищем до конец строки . Как мы просто хотим знать, является ли строка прописной или нет, мы можем указать возврат в виде логического значения:
import re example_1 = 'Hello, my name is Rikesh!' res = bool(re.match(r'[A-Z]+$', example_1)) print(res) # False
Это не должно приходить как удивление, так как наша строка четко содержит смесь символов верхнего и нижнего регистра.
import re res=bool(re.match(r'[A-Z]+$', example_2)) example_2 = 'HELLO, MY NAME IS RIK@SH48!!' print(res) # False
Хорошо, это, вероятно, не то, что вы ожидали. Это, конечно, не то, что я ожидал! Все наши персонажи явно прописные, так что произошло? По сути, Regex распознал нашу строку содержит специальные символы (‘@’, ‘!!’ а также ‘,’), А также цифры (48). Поскольку они считаются разными классами, они не находятся в верхнем диапазоне A-Z, поэтому он вернул false. Помните, что мы попросили REGEOX соответствовать строке только заглавные буквы буквы.
Если мы сейчас попробуем ту же функцию на строке, содержащей только буквенные буквы, без специальных символов или цифр, мы получаем следующий результат:
import re example_3 = 'HELLO MY NAME IS RIKESH' res = bool(re.match(r'[A-Z]+$', example_3)) print(res) # False
Даже это не работает! К сожалению, Regex не игнорирует пробелы по умолчанию, что означает, что эта функция будет применяться только в том случае, если мы уверены, что наша исходная строка не содержит специальных символов, цифр или даже пробелов. Адаптация функции, я уверен, был бы возможным, но кажется чрезмерно сложной, когда у нас будет гораздо более простое решение.
Метод 3: Regex Любой строчный
Мы можем использовать то, как Regex определяет символы нашему преимуществам, вместо этого работая с строчными буквами. Логика в том, что если в нашей строке есть строчный символ, не все символы являются прописными. Это обеспечит проблему со специальными символами, цифрами и пробелами устаревшим – предполагая, что, конечно, вы не хотели, чтобы они повлияли на результат. Для целей этой статьи мы предположим, что наша цель состоит в том, чтобы убедиться, что все символы в нашей строке являются прописными буквенными символами, а не строчными буквами.
То, как мы можем проверить, если Любой Алфавитный символ в нашей строке строчная с регулярным выражением: следующее:
import re example_1 = 'Hello, my name is Rikesh!' res=bool(re.match(r'\w*[a-z]\w*', example_1)) print(res) # True
Помните, мы ищем строчные символы сейчас, поэтому, хотя у нас есть смесь верхнего и нижнего в этом примере, возвращение – Правда
I.e. Строка содержит строчные буквы, поэтому имеют не только заглавные буквы.
import re example_2 = 'HELLO, MY NAME IS RIK@SH48!!' res=bool(re.match(r'\w*[a-z]\w*', example_2)) print(res) # False
Несмотря на то, что наша строка содержит специальные символы, цифры и пробелы Возврат – это Ложь
Потому что он не содержит строчных буквенных символов. Все персонажи прописные буквы.
Метод 4: ASCII и любой ()
Струнная библиотека содержит функции, специально для обработки строк Python, и мы можем использовать это для поиска нашей строки на основе символа ASCII, который мы только что коснулись.
Как мы видели ранее с Regex , если мы не уверены, что ваша оригинальная строка не содержит цифр, специальные символы или даже пробелы, в зависимости от того, могут ли все символы заглавными буквами могут быть проблематичными. В тех случаях, когда мы не можем быть уверены, что наша строка содержит только алфавитные символы, которые мы можем еще раз использовать нашу «обратная проверка» – если строка содержит любые строчные буквы, которые мы знаем, не все символы, являются прописными. string.ascii_lowercase
Функция поможет нам сделать это.
Мы можем использовать любой ()
Способ проверки Если какие-либо символы в строке содержат свойство, которую мы ищем:
import string example_1 = 'Hello, my name is Rikesh!' res = any(s in string.ascii_lowercase for s in example_1) print(res) # True
Как у нас есть смесь верхних и строчных буквенных символов, функция вернула Правда
, опять помните, мы спрашиваем, если любой символы строчные.
import string example_2 = 'HELLO, MY NAME IS RIK@SH48!!' res = any(s in string.ascii_lowercase for s in example_2) print(res) # False
Все наши алфавитные символы в этом примере в верхнем регистре, поэтому функция возвращается Ложь
Нет строчных букв. Специальные символы и цифры были проигнорированы.
Значения ASCII
Этот метод был оставлен до конца для веской причины, как я думаю, это самые сложные их все. Метод основан на том факте, что все наши символы ASCII имеют соответствующее значение, поэтому мы можем проверить, являются ли наши символы в верхнем регистре в зависимости от их соответствующих значений. Например, значения ASCII для прописных букв варьируются от 65-90 включительно, а для строчных букв от 97-122 включительно.
Если бы мы проверили, являются ли все символы заглавными буквами, у нас будет проблема, которую мы столкнулись с специальными и числовыми символами. Однако мы можем использовать строчную логику – если есть строчный характер, они не могут быть прописными. Чтобы получить значение ASCII персонажа, которое мы должны использовать Орд ()
Функция:
Давайте просто проверим его, чтобы увидеть:
>>> ord('A') 65 >>> ord('a') 97
Таким образом, мы можем проверить, входит ли кто-нибудь из символов в нашем строке в пределах строчного диапазона (97-122), просто чтобы подтвердить, если мы использовали верхний регистр, он будет поменяться не только строчными буквами, а также специальные символы и цифры.
example_1 = 'Hello, my name is Rikesh!' res=any(ord(s)>=97 and ord(s)<=122 for s in example_1) print(res) # True example_2 = 'HELLO, MY NAME IS RIK@SH48!!' res=any(ord(s)>=97 and ord(s)<=122 for s in example_2) print(res) # False
Как мы видим из наших примеров, наши example_1
содержится строчные буквенные символы, поэтому мы получили Правда
возвращение. Несмотря на то, что наше example_2
Содержит специальные символы и цифры, которые мы получили Ложь
Вернуться, так как нет строчных символов.
Резюме
Целью данной статьи было посмотреть методы проверки, являются ли все символы строки в верхнем регистре. Если это наша основная цель, Isupper ()
Метод, по-видимому, является наиболее простым, в первую очередь, потому что он фокусируется только на алфавитных символах, и игнорирует что-либо еще – цифры, специальные символы и белые пробелы.
Хотя другие методы могут быть более целенаправленными, их полезность действительно зависит от того, как мы хотим определить наши «персонажи» и то, что мы пытаемся достичь. На основании того, что мы хотим сосредоточиться исключительно на обеспечении наших алфавитных символов, а не в верхнем регистре, а не строчные, они имеют ограниченную полезность и могут предоставить вводящие в заблуждение результаты. Как мы видели, мы можем обойти это, адаптируя к нашим критериям поиска, чтобы сосредоточиться на идентификации только строчных буквенных символов. Это похоже на противоположность того, что мы пытаемся достичь, поэтому нам нужно убедиться, что мы интерпретируем наши Правда
и Ложь
Результаты правильно.
Все, что считается, что это трудно, хотя найти причину, чтобы не использовать Isupper ()
метод.
Оригинал: “https://blog.finxter.com/check-if-all-characters-of-a-string-are-uppercase/”