Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~
В 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()
Очистите кеш регулярных выражений.