Python . Регулярное выражение при указании начала и конца строки не работает

Рейтинг: 1Ответов: 2Опубликовано: 20.01.2023
import re
strng="abcABC123"
def lowercase_count(strng):
    print(re.findall('^[a-z]$', strng))

почему если здесь поставить Начало строки ^ и конец $ он ничего не находит? А если их убрать оно как надо находит строчные буквы

задача — подсчитать общее количество строчных букв в строке. Я потом это в len() оберну, не проблема, просто не понятно.То есть '^[a-z]$' означает всего одну букву ? А если хочу искать из огромной строки строчные буквы почему нельзя ^ и $?

Ответы

▲ 3Принят
strng="abcABC123"
______^_________$ - определение в строке положения метасимволов начала и конца строки

Перевести регулярное выражение в читаемый вид:

^[a-z]$
^________ - начало строки
_^^^^^___ - буква латинского языка в нижнем регистре
______^__ - конец строки

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

string="a"
_______^_$

Для примера указать только символ начала строки в выражении ^[a-z] то регулярное выражение найдет из обоих примеров string только первую a

strng="abcABC123"
______^__________ - начало строки
_______^_________ - [a-z]

Так как нет ограничения что далее идет конец строки, то будет выбрана только первая буква в нижнем регистре находящаяся в начале строки.

[a-z] без указания границ строки в сочетании с findall(своеобразный аналог глобального поиска) осуществляет поиск всех одиночных символов латинского алфавита в нижнем регистре:

strng="abcABC123"
_______^_________ - 1 совпадение
________^________ - 2 совпадение
_________^_______ - 3 совпадение
__________^^^^^^_ - так же проверяются, но данные под захват не подходят.

Поиск одиночных выполняется по порядку слева на право и захватывает символы подходящие под шаблон из любого места

▲ 1

В ^[a-z]$:

  • ^ - означает начало строки
  • $ - означает конец строки
  • [a-z] - означает поиск одного символа из диапазона а - z

Если хотите искать последовательности букв английского алфавита, которые могут находиться в любом месте строки, то:

[a-z]+

PS.

Для поиска букв в верхнем регистре используйте еще A-Z: [a-zA-Z]+. Либо в findall передавайте флаг re.I или re.IGNORECASE