Заметки по Python (23): обычные модули

Python Технологии Nuggets призывают к публикации
Заметки по Python (23): обычные модули

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~

В Python предусмотрен модуль для работы с регулярными выражениями, а именноreмодуль.

Декораторы регулярных выражений

модификатор описывать полное имя
re.I сделать совпадение нечувствительным к регистру re.IGNORECASE
re.A позволять\w, \W, \b, \B, \d, \D, \sи\Sсоответствует только ASCII, а не Unicode re.ASCII
re.L Сопоставление с учетом локали re.LOCALE
re.M Многострочное сопоставление влияет на ^ и $ и поддерживает сопоставление в начале строки в многострочном режиме. re.MULTILINE
re.S сделать.соответствует всем символам, включая новые строки e.DOTALL
re.U Разбирать символы в соответствии с набором символов Unicode. Этот признак влияет\w, \W, \b, \B. re.UNICODE
re.X Этот флаг упрощает понимание написания регулярных выражений, предоставляя вам более гибкое форматирование. re.VERBOSE

Найдите одно совпадение

match

re.matchеслиstringЕсли первые ноль или более символов соответствуют шаблону регулярного выражения, возвращается соответствующийобъект соответствия. Если совпадения нет, вернутьсяNone; обратите внимание, что это не то же самое, что совпадение нулевой длины.

формат синтаксиса

re.match(pattern, string, flags=0)
  • шаблон: регулярное выражение для соответствия
  • строка: строка для сопоставления.
  • flags: бит флага, используемый для управления методом сопоставления регулярных выражений, например: с учетом регистра, многострочного сопоставления и т. д.

Метод re.match возвращает соответствующий объект, если совпадение прошло успешно, в противном случае он возвращает None.

образец кода

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string1 = "hello python"
string2 = "hell5o python"
pattern = r"[a-z]+\s\w+"  # a-z出现1次到任意次加一个\s加任意字符出现1次到任意次
print(re.match(pattern, string1))  # <re.Match object; span=(0, 12), match='hello python'>
print(re.match(pattern, string2))  # None

Импортируйте модуль re для запуска,r""представлен в виде регулярного выражения

Поскольку число 5 появляется в середине строки2, оно не соответствует

group

re.groupРезультат получается из объекта Match, но по умолчанию он равен 0, если он не сгруппирован, а индекс группировки начинается с 0 (0 — полное совпадение). быть назван с использованием

образец кода

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string1 = "hello python"
string2 = "hell5o python"
pattern = r"[a-z]+\s\w+"
pattern1 = r"(\w+)(\s)(\w+)"
pattern2 = r"(?P<first>\w+\s)(?P<last>\w+)"  # 命名分组
print(re.match(pattern, string1))  # <re.Match object; span=(0, 12), match='hello python'>
print(re.match(pattern, string1).group())  # hello python
print(re.match(pattern, string2))  # None
print(re.match(pattern1, string2).group(0))  # hell5o python
print(re.match(pattern1, string2).group(1))  # hell5o
print(re.match(pattern1, string2).group(2))  # 这里匹配的是那个空格
print(re.match(pattern1, string2).group(3))  # python
print(re.match(pattern2, string2).group("last"))  # python

search

re.searchПросканируйте всю строку, чтобы найти первую позицию совпадающего шаблона, и верните соответствующийобъект соответствия. Если совпадения нет, вернутьNone; Обратите внимание, что это не то же самое, что найти совпадение нулевой длины. . Структура синтаксиса такая же, как у match

образец кода

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string = "Hi World Hello python"
pattern = r"Hello python"
print(re.search(pattern, string).group())  # Hello python
print(re.match(pattern, string))  # None

Разница между двумя

re.matchСоответствует только началу строки, если начало строки не соответствует регулярному выражению, совпадение не удается, функция возвращает None иre.searchСопоставьте всю строку, пока не будет найдено совпадение.

fullmatch

re.fullmatchЕсли вся строка соответствует регулярному выражению, вернуть соответствующийобъект соответствия. в противном случае вернутьсяNone; Обратите внимание, что это отличается от совпадения нулевой длины.

Синтаксис такой же, как и выше

образец кода

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string = "Hi World Hello python"
pattern = r"Hi World Hello python"
pattern1 = r"hi World hello python"

print(re.fullmatch(pattern, string))  # <re.Match object; span=(0, 21), match='Hi World Hello python'>
print(re.fullmatch(pattern1, string))  # None

Разница между тремя

match: совпадение в начале строки

search: найти совпадение в любом месте

fullmatch: вся строка должна точно соответствовать регулярному выражению

объект соответствия

Объекты соответствия всегда имеют логическое значениеTrue. если нет совпаденийmatch()иsearch() 返回 NoneТаким образом, вы можете просто использоватьifоператор, чтобы проверить, соответствует ли он

образец кода

import re
string = "Hi World Hello python"
pattern = r"Hello python"
match1 = re.search(pattern, string)
match2 = re.match(pattern, string)
if match1:
    print(match1.group())  # Hello python

if match2:  # 因为match2的值为none所以不执行
    print(match2.group())

Найти несколько совпадений

compile

re.compileКомпилирует стиль регулярного выражения в регулярный объект, который можно использовать для сопоставления

Грамматические структуры

re.compile(pattern, flags=0)
  • pattern: регулярное выражение для соответствия
  • flags: Бит флага используется для управления методом сопоставления регулярных выражений, например: с учетом регистра, многострочного сопоставления и т. д.

findall

re.findallНаходит все подстроки в строке, соответствующие регулярному выражению, и возвращает список или пустой список, если совпадений не найдено. Разница между match и search заключается в том, что match и search совпадают один раз, а findall — все.

Грамматические структуры

re.findall(string[, pos[, endpos]])
  • string: Строка для соответствия.
  • pos: необязательный параметр, указывающий начальную позицию строки, по умолчанию 0.
  • endpos: необязательный параметр, указывающий конечную позицию строки, по умолчанию — длина строки.

finditer

pattern существуетstring Все неповторяющиеся совпадения в , возвращенные в виде сохраненного итератораобъект соответствия. *string* Сканирование слева направо, совпадения отсортированы по порядку. Пустые совпадения также включаются в результат.

одинаковая грамматическая структураmatch

образец кода

import re
from collections.abc import Iterator  # 导入判断是否为迭代器的对象
string = "hello python hi javascript"
pattern = r"\b\w+\b"
pattern_object = re.compile(r"\b\w+\b")
print(type(pattern_object))  # <class 're.Pattern'>

findall = pattern_object.findall(string)
for i in findall:
    print(i)

finditer = re.finditer(pattern, string)
# 判断是否为迭代器
print(isinstance(finditer, Iterator))  # True
for _ in range(4):
    finditer1 = finditer.__next__()  # 取出下一个值
    print(finditer1.group())
'''
--循环结果--
hello
python
hi
javascript
'''

Если имеется большое количество совпадений, производительность возврата finditer лучше, чем findall, что является разницей между списками и итераторами.

сплит сплит

re.splitМетод возвращает список после разделения строки в соответствии с подстроками, которые могут быть сопоставлены.

Грамматические структуры

re.split(pattern, string[, maxsplit=0, flags=0])
  • pattern: соответствие регулярному выражению
  • string: разделитель.
  • maxsplit: количество разделений,maxsplit=1Разделяется один раз, значение по умолчанию равно 0, а количество раз не ограничено.
  • flagsБит флага : используется для управления методом сопоставления регулярных выражений, например: с учетом регистра, многострочного сопоставления и т. д.

образец кода

import re
string = '''hello hi    good morning
goodnight
python
javascript
Linux
'''
pattern = r'\s+'  # 以空格回车制表符为回车符
print(re.split(pattern, string))  # 不限制次数分隔
# ['hello', 'hi', 'good', 'morning', 'goodnight', 'python', 'javascript', 'Linux', '']
print(re.split(pattern, string, 5))  # 分隔5次
# ['hello', 'hi', 'good', 'morning', 'goodnight', 'python\njavascript\nLinux\n']

иstrмодульныйsplitразница в том,reмодульныйsplitподдерживать регулярные

заменять

sub

re.subИспользуется для замены совпадений в строке

Грамматические структуры

re.sub(pattern, repl, string, count=0, flags=0)
  • pattern : Строка шаблона в регулярном выражении.
  • repl : Заменяемая строка также может быть функцией.
  • string : Исходная строка, которую необходимо найти и заменить.
  • count: максимальное количество замен после сопоставления с образцом, значение по умолчанию 0 означает замену всех совпадений.
  • flags : шаблон соответствия, используемый во время компиляции, в числовой форме.

Здесь вы можете заполнить область комментариев для определенной руки и изменить небольшой случай плохих комментариев.

import re
string = input("请输入评论:")
pattern = r"[美丽可爱大方]{1}"  # 检测的字符
print(re.sub(pattern, "萌", string))

визуализация

subn

поведение иsub()то же самое, но возвращает кортеж(字符串, 替换次数).

escape

re.escape(pattern)Экранирование специальных символов в шаблоне. например в обычномметасимвол.

образец кода

import re
pattern = r'\w\s*\d\d.'
# 打印pattern的特殊字符
print(re.escape(pattern))  # \w\s*\d\d.

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

purge

re.purge()Очистите кеш регулярных выражений.