Символьные классы и сокращенные определения классов.
В шаблонах регулярных выражений большинство букв и символов будут просто соответствовать друг другу. Например test будет точно соответствовать строке test . Можно включить режим без учета регистра, который позволил бы этому регулярному выражению совпадать Test или TEST .
Есть исключения из этого правила, некоторые символы являются специальными метасимволами и не соответствуют друг другу. Вместо этого они сигнализируют, что какие-то строки должны быть сопоставлены с чем-то или они влияют на другие части регулярного выражения, повторяя их или изменяя их значение.
Первые метасимволы, на которые стоит обратить внимание, это '[' и ']' . Они используются для указания символьного класса, который представляет собой набор символов, которым нужно соответствовать. Символы могут быть перечислены по отдельности, или может быть указан диапазон символов, например [a-z] . Например [abc] будет соответствовать любому из символов a , b или c . Это то же самое, что и выражение [a-c] , которое использует диапазон для выражения того же набора символов. Если шаблону поиска необходимо соответствие только строчным буквам, то регулярное выражение будет [a-z] .
Метасимволы не активны внутри символьных классов регулярного выражения за некоторым исключением. Например, [akm$] будет соответствовать любому из символов 'a' , 'k' , 'm' или '$' , обычно '$' это метасимвол, но внутри символьных классов он лишен своей особой природы.
Можно сопоставить символы, не перечисленные в символьном классе [] — квадратные скобки. Это достигается включением '^' в качестве первого символа символьного класса. Например, [^5] будет соответствовать любой символ, кроме '5' . Если этот символ будет стоять внутри символьного класса (не первым), то он будет обозначать сам себя, а вне символьного класса '^' будет соответствовать позиции в начале строки.
Возможно, самый важный метасимвол — это обратный обратный слеш '\' . Как в строковых литералах Python, за обратной косой чертой могут следовать различные символы для обозначения специальных последовательностей. Он также используется для экранирования всех метасимволов, чтобы вы могли сопоставлять их по шаблонам. Например, если вам нужно сопоставить '[' или '\' , вы можете поставить перед ними обратную косую черту, чтобы убрать их особое значение: '\[' или '\\' .
Некоторые из специальных последовательностей, начинающихся с '\' представляют предопределенные наборы символов, которые часто полезны, такие как набор цифр, набор букв или набор всего, что не является пробелом. Такие последовательности еще называют "сокращенные определения символьных классов".
Рассмотрим пример: специальная последовательность \w соответствует любому буквенно-цифровому символу. Если шаблон регулярного выражения выражен в байтах, то это эквивалентно символьному классу [a-zA-Z0-9_] . Если шаблон регулярного выражения является строкой, то \w будет соответствовать всем символам, отмеченным как буквы в базе данных Unicode, предоставленной модулем unicodedata. Можно использовать более ограниченное определение специальной последовательности \w в строковом шаблоне поиска, указав флаг re.ASCII при компиляции регулярного выражения.
Следующий список сокращенных определений символьных классов не является полным. Полный список специальных последовательностей и сокращенных определений символьных классов для строковых шаблонов Unicode смотрите в разделе "Синтаксис регулярных выражений". Как правило, версии Unicode соответствуют любому символу, который находится в соответствующей категории в базе данных Unicode.
Список сокращенных определений символьных классов:
- '\d' — Соответствует любой десятичной цифре; эквивалентно символьному классу [0-9].
- '\D' — Соответствует любому нецифровому символу; это эквивалентно символьному классу [^0-9] .
- '\s' — Соответствует любому пробельному символу; эквивалентно символьному классу [ \t\n\r\f\v] .
- '\S' — Соответствует любому непробельному символу; эквивалентно символьному классу [^ \t\n\r\f\v] .
- '\w' — Соответствует любому буквенно-цифровому символу; эквивалентно символьному классу [a-zA-Z0-9_] .
- '\W' — Соответствует любому не алфавитно-цифровому символу; эквивалентно символьному классу [^a-zA-Z0-9_] .
Эти специальные последовательности могут быть включены в класс символов регулярных выражений. Например, [\s,.] — это символьный класс, который будет соответствовать любому символу пробела, или ', ' или '.' .
Что делают квадратные скобки в python
Что означают квадратные скобки
Добрый день. Может не в той теме вопрос. Есть квадратные скобки . Как это работает? $ ls .
Питонисты, прекратите использовать квадратные скобки для получения значений из словаря
Привет, Хабр! представляю вашему вниманию перевод статьи «Stop Using Square Bracket Notation to Get a Dictionary’s Value in Python» автора Jonathan Hsu.
Выходим за рамки традиционного метода и защищаем свой код
Словарь — это несортированный набор ключей и значений. Это значит, что:
- Каждый элемент словаря состоит из термина (ключ) и его определения (значение).
- Ключи должны быть уникальными для данного словаря — никаких повторений.
- Ключи в словаре не имеют такого явного порядка расположения, который есть у элементов списка.
Традиционный (и небезопасный) способ получения значения из словаря.
При обычном доступе к значению элемента из словаря используются квадратные скобки. При использовании такой записи после имени словаря в квадратных скобках указывается ключ:
Обратите внимание, что попытка обратиться к значению по ключу, которого нет в словаре, вызовет исключение KeyError. Это может создать серьёзные проблемы, особенно при работе с непредсказуемыми рабочими данными.
Конечно, можно воспользоваться конструкцией try/except или использовать инструкцию if. Но такое повышенное внимание к столь простой операции лишь загромождает код.
Если у вас за плечами опыт разработки на JavaScript, то вам, возможно, захочется получить значение из словаря с помощью точечной нотации. Но в Python’е это не сработает.
Используем метод get()
Когда вам нужно получить значение из словаря, то самым безопасным способом будет использование метода get(). У этого метода есть два параметра:
- Первый (обязателен): имя ключа, по которому мы хотим получить значение. Это имя может быть строкой или может быть именем переменной, если наш ключ может меняться по ходу программы.
- Второй (не обязателен): значение, которое будет использовано, если нашего ключа в словаре вдруг не окажется.
Если ключ существует в словаре, то метод get() работает точно таким же образом, как и обращение по ключу в квадратных скобках. Зато в случае, когда такого ключа в словаре нет, метод get() вернёт значение по умолчанию, избавив вас от необходимости обрабатывать исключение.
Значением по умолчанию может быть любой допустимый в данном контексте объект. Не забывайте о том, что этот параметр не обязателен. Поэтому, если вы его не укажете явным образом, то при попытке обратиться по несуществующему в словаре ключу, метод get() вернёт объект None.
Используем метод setdefault()
Иногда вам будет нужно не только безопасно получить данные из словаря, но и также безопасно добавить новые данные в словарь. Для этого у словарей есть метод setdefault(). Он имеет те же параметры, что и метод get(), но в отличие от последнего, при обращении к словарю по несуществующему ключу, он не только вернёт переданное по умолчанию значение, но и создаст в словаре новый элемент с этим ключом и переданным значением. Если при обращении к словарю с помощью метода setdefault() передаваемый ключ уже есть в словаре, то данный метод оставит словарь без изменений.
print(author.setdefault(‘username’)) # выведет Friday1719
print(author.setdefault(‘middle_initial’, “Monday”)) # выведет Monday и создаст
# в словаре элемент с ключом ‘middle_initial’ и значением для этого ключа “Monday”
В примере выше мы видим, что поведение метода setdefault() ничем не отличается от поведения метода get() или от применения квадратных скобок при обращении к словарю по существующему в нём ключу. В случае, если такого ключа в словаре нет, то метод setdefault() не только вернёт в программу значение своего второго аргумента (как и метод get()), но и создаст в словаре элемент с переданными ему ключом и значением. Это поведение метода setdefault() и отличает его от метода get().
Теперь, если выполнить пример выше и вывести элементы словаря, то мы получим такой результат:
Применение методов get() и setdefault() является первоклассной техникой при обращении к значениям словаря. Нужно лишь время, чтобы отказаться от старых привычек и начать использовать эту технику на практике.
Если вам нужно только получить значение из словаря, то ваш помощник — метод get().
Если же вам нужно безопасно добавить новое значение в словарь, то вызывайте метод setdefault().