Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Поиск первого совпадения с шаблономСодержание книги
Поиск на нашем сайте
>>> import re >>> p = re.compile(r"[0-9]+") >>> print("Найдено" if p.match("str123") else "Нет") Нет >>> print("Найдено" if p.match("str123", 3) else "Нет") Найдено >>> print("Найдено" if p.match("123str") else "Нет") Найдено
>>> p = r"[0-9]+" >>> print("Найдено" if re.match(p, "str123") else "Нет") Нет >>> print("Найдено" if re.match(p, "123str") else "Нет") Найдено >>> p = re.compile(r"[0-9]+") >>> print("Найдено" if re.match(p, "123str") else "Нет") Найдено
>>> p = re.compile(r"[0-9]+") >>> print("Найдено" if p.search("str123") else "Нет") Найдено >>> print("Найдено" if p.search("123str") else "Нет") Найдено >>> print("Найдено" if p.search("123str", 3) else "Нет") Нет
>>> p = r"[0-9]+" >>> print("Найдено" if re.search(p, "str123") else "Нет") Найдено >>> p = re.compile(r"[0-9]+") >>> print("Найдено" if re.search(p, "str123") else "Нет") Найдено
>>> p = re.compile("[Pp]ython") >>> print("Найдено" if p.fullmatch("Python") else "Нет") Найдено >>> print("Найдено" if p.fullmatch("py") else "Нет") Нет >>> print("Найдено" if p.fullmatch("PythonWare") else "Нет") Нет >>> print("Найдено" if p.fullmatch("PythonWare", 0, 6) else "Нет") Найдено
>>> p = "[Pp]ython" >>> print("Найдено" if re.fullmatch(p, "Python") else "Нет") Найдено >>> print("Найдено" if re.fullmatch(p, "py") else "Нет") Нет
Листинг 7.12. Суммирование неопределенного количества чисел # -*- coding: utf-8 -*- import re print("Введите слово 'stop' для получения результата") summa = 0 p = re.compile(r"^[-]?[0-9]+$", re.S) while True: x = input("Введите число: ") if x == "stop": break # Выход из цикла if not p.search(x): print("Необходимо ввести число, а не строку!") continue # Переходим на следующую итерацию цикла x = int(x) # Преобразуем строку в число summa += x print("Сумма чисел равна:", summa) input()
>>> p = re.compile(r"(?P<num>[0-9]+)(?P<str>[a-z]+)") >>> m = p.search("123456string 67890text") >>> m <_sre.SRE_Match object at 0x00FC9DE8> >>> m.re.groups, m.re.groupindex (2, {'num': 1, 'str': 2}) >>> p.groups, p.groupindex (2, {'num': 1, 'str': 2}) >>> m.string '123456string 67890text' >>> m.lastindex, m.lastgroup (2, 'str') >>> m.pos, m.endpos (0, 22)
>>> p = re.compile(r"(?P<num>[0-9]+)(?P<str>[a-z]+)") >>> m = p.search("123456string 67890text") >>> m.group(), m.group(0) # Полное соответствие шаблону ('123456string', '123456string') >>> m.group(1), m.group(2) # Обращение по индексу ('123456', 'string') >>> m.group("num"), m.group("str") # Обращение по названию ('123456', 'string') >>> m.group(1, 2), m.group("num", "str") # Несколько параметров (('123456', 'string'), ('123456', 'string'))
>>> p = re.compile(r"(?P<num>[0-9]+)(?P<str>[a-z])?") >>> m = p.search("123456") >>> m.groupdict() {'num': '123456', 'str': None} >>> m.groupdict("") {'num': '123456', 'str': ''}
>>> p = re.compile(r"(?P<num>[0-9]+)(?P<str>[a-z])?") >>> m = p.search("123456") >>> m.groups() ('123456', None) >>> m.groups("") ('123456', '')
>>> p = re.compile(r"(?P<num>[0-9]+)(?P<str>[a-z]+)") >>> s = "str123456str" >>> m = p.search(s) >>> m.start(), m.end(), m.span() (3, 12, (3, 12)) >>> m.start(1), m.end(1), m.start("num"), m.end("num") (3, 9, 3, 9) >>> m.start(2), m.end(2), m.start("str"), m.end("str") (9, 12, 9, 12) >>> m.span(1), m.span("num"), m.span(2), m.span("str") ((3, 9), (3, 9), (9, 12), (9, 12)) >>> s[m.start(1):m.end(1)], s[m.start(2):m.end(2)] ('123456', 'str')
>>> p = re.compile(r"<(?P<tag1>[a-z]+)><(?P<tag2>[a-z]+)>") >>> m = p.search("<br><hr>") >>> m.expand(r"<\2><\1>") # \номер '<hr><br>' >>> m.expand(r"<\g<2>><\g<1>>") # \g<номер> '<hr><br>' >>> m.expand(r"<\g<tag2>><\g<tag1>>") # \g<название> '<hr><br>'
Листинг 7.13. Проверка e-mail на соответствие шаблону # -*- coding: utf-8 -*- import re email = input("Введите e-mail: ") pe = r"^([a-z0-9_.-]+)@(([a-z0-9-]+\.)+[a-z]{2,6})$" p = re.compile(pe, re.I | re.S) m = p.search(email) if not m: print("E-mail не соответствует шаблону") else: print("E-mail", m.group(0), "соответствует шаблону") print("ящик:", m.group(1), "домен:", m.group(2)) input() Поиск всех совпадений с шаблоном >>> import re >>> p = re.compile(r"[0-9]+") >>> p.findall("2007, 2008, 2009, 2010, 2011") ['2007', '2008', '2009', '2010', '2011'] >>> p = re.compile(r"[a-z]+") >>> p.findall("2007, 2008, 2009, 2010, 2011") [] >>> t = r"(([0-9]{3})-([0-9]{2})-([0-9]{2}))" >>> p = re.compile(t) >>> p.findall("322-77-20, 528-22-98") [('322-77-20', '322', '77', '20'), ('528-22-98', '528', '22', '98')]
>>> re.findall(r"[0-9]+", "1 2 3 4 5 6") ['1', '2', '3', '4', '5', '6'] >>> p = re.compile(r"[0-9]+") >>> re.findall(p, "1 2 3 4 5 6") ['1', '2', '3', '4', '5', '6']
>>> p = re.compile(r"[0-9]+") >>> for m in p.finditer("2007, 2008, 2009, 2010, 2011"): print(m.group(0), "start:", m.start(), "end:", m.end())
2007 start: 0 end: 4 2008 start: 6 end: 10 2009 start: 12 end: 16 2010 start: 18 end: 22 2011 start: 24 end: 28
>>> p = re.compile(r"<b>(.+?)</b>", re.I | re.S) >>> s = "<b>Text1</b>Text2<b>Text3</b>" >>> for m in re.finditer(p, s): print(m.group(1))
Text1 Text3 Замена в строке >>> import re >>> p = re.compile(r"<(?P<tag1>[a-z]+)><(?P<tag2>[a-z]+)>") >>> p.sub(r"<\2><\1>", "<br><hr>") # \номер '<hr><br>' >>> p.sub(r"<\g<2>><\g<1>>", "<br><hr>") # \g<номер> '<hr><br>' >>> p.sub(r"<\g<tag2>><\g<tag1>>", "<br><hr>") # \g<название> '<hr><br>'
# -*- coding: utf-8 -*- import re def repl(m): """ Функция для замены. m — объект Match """ x = int(m.group(0)) x += 10 return "{0}".format(x)
p = re.compile(r"[0-9]+") # Заменяем все вхождения print(p.sub(repl, "2008, 2009, 2010, 2011")) # Заменяем только первые два вхождения print(p.sub(repl, "2008, 2009, 2010, 2011", 2)) input()
# -*- coding: utf-8 -*- import re def repl(m): """ Функция для замены. m — объект Match """ tag1 = m.group("tag1").upper() tag2 = m.group("tag2").upper() return "<{0}><{1}>".format(tag2, tag1) p = r"<(?P<tag1>[a-z]+)><(?P<tag2>[a-z]+)>" print(re.sub(p, repl, "<br><hr>")) input()
>>> p = re.compile(r"[0-9]+") >>> p.subn("0", "2008, 2009, 2010, 2011") ('0, 0, 0, 0', 4)
>>> p = r"200[79]" >>> re.subn(p, "2001", "2007, 2008, 2009, 2010") ('2001, 2008, 2001, 2010', 2)
>>> p = re.compile(r"<(?P<tag1>[a-z]+)><(?P<tag2>[a-z]+)>") >>> m = p.search("<br><hr>") >>> m.expand(r"<\2><\1>") # \номер '<hr><br>' >>> m.expand(r"<\g<2>><\g<1>>") # \g<номер> '<hr><br>' >>> m.expand(r"<\g<tag2>><\g<tag1>>") # \g<название> '<hr><br>' Прочие функции и методы >>> import re >>> p = re.compile(r"[\s,.]+") >>> p.split("word1, word2\nword3\r\nword4.word5") ['word1', 'word2', 'word3', 'word4', 'word5'] >>> p.split("word1, word2\nword3\r\nword4.word5", 2) ['word1', 'word2', 'word3\r\nword4.word5']
>>> p = re.compile(r"[0-9]+") >>> p.split("word, word\nword") ['word, word\nword']
>>> p = re.compile(r"[\s,.]+") >>> re.split(p, "word1, word2\nword3") ['word1', 'word2', 'word3'] >>> re.split(r"[\s,.]+", "word1, word2\nword3") ['word1', 'word2', 'word3']
>>> print(re.escape(r"[]().*")) \[\]\(\)\.\*
>>> re.purge() Списки, кортежи, множества и диапазоны >>> arr = [1, 2, 3] # Создаем список >>> arr[0] # Получаем элемент по индексу >>> arr[0] = 50 # Изменяем элемент по индексу >>> arr [50, 2, 3]
>>> t = (1, 2, 3) # Создаем кортеж >>> t[0] # Получаем элемент по индексу >>> t[0] = 50 # Изменить элемент по индексу нельзя! Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> t[0] = 50 # Изменить элемент по индексу нельзя! TypeError: 'tuple' object does not support item assignment
>>> set([0, 1, 1, 2, 3, 3, 4]) {0, 1, 2, 3, 4}
>>> r = range(0, 101, 10) >>> for i in r: print(i, end = " ")
0 10 20 30 40 50 60 70 80 90 100 Создание списка >>> list() # Создаем пустой список [] >>> list("String") # Преобразуем строку в список ['S', 't', 'r', 'i', 'n', 'g'] >>> list((1, 2, 3, 4, 5)) # Преобразуем кортеж в список [1, 2, 3, 4, 5]
>>> arr = [1, "str", 3, "4"] >>> arr [1, 'str', 3, '4']
>>> arr = [] # Создаем пустой список >>> arr.append(1) # Добавляем элемент1 (индекс 0) >>> arr.append("str") # Добавляем элемент2 (индекс 1) >>> arr [1, 'str']
>>> arr = [] >>> arr[] = 10 SyntaxError: invalid syntax >>> arr[0] = 10 Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> arr[0] = 10 IndexError: list assignment index out of range
>>> x = y = [1, 2] # Якобы создали два объекта >>> x, y ([1, 2], [1, 2])
>>> y[1] = 100 # Изменяем второй элемент >>> x, y # Изменилось значение сразу в двух переменных ([1, 100], [1, 100])
>>> x, y = [1, 2], [1, 2] >>> y[1] = 100 # Изменяем второй элемент >>> x, y ([1, 2], [1, 100])
>>> arr = [ [] ] * 2 # Якобы создали два вложенных списка >>> arr [[], []] >>> arr[0].append(5) # Добавляем элемент >>> arr # Изменились два элемента [[5], [5]]
>>> arr = [] >>> for i in range(2): arr.append([])
>>> arr [[], []] >>> arr[0].append(5); arr [[5], []]
>>> arr = [ [] for i in range(2) ] >>> arr [[], []] >>> arr[0].append(5); arr [[5], []]
>>> x = y = [1, 2] # Неправильно >>> x is y # Переменные содержат ссылку на один и тот же список True >>> x, y = [1, 2], [1, 2] # Правильно >>> x is y # Это разные объекты False
Листинг 8.1. Создание поверхностной копии списка >>> x = [1, 2, 3, 4, 5] # Создали список >>> # Создаем копию списка >>> y = list(x) # или с помощью среза: y = x[:] >>> # или вызовом метода copy(): y = x.copy() >>> y [1, 2, 3, 4, 5] >>> x is y # Оператор показывает, что это разные объекты False >>> y[1] = 100 # Изменяем второй элемент >>> x, y # Изменился только список в переменной y ([1, 2, 3, 4, 5], [1, 100, 3, 4, 5])
>>> x = [1, [2, 3, 4, 5]] # Создали вложенный список >>> y = list(x) # Якобы сделали копию списка >>> x is y # Разные объекты False >>> y[1][1] = 100 # Изменяем элемент >>> x, y # Изменение затронуло переменную x!!! ([1, [2, 100, 4, 5]], [1, [2, 100, 4, 5]])
Листинг 8.2. Создание полной копии списка >>> import copy # Подключаем модуль copy >>> x = [1, [2, 3, 4, 5]] >>> y = copy.deepcopy(x) # Делаем полную копию списка >>> y[1][1] = 100 # Изменяем второй элемент >>> x, y # Изменился только список в переменной y ([1, [2, 3, 4, 5]], [1, [2, 100, 4, 5]])
>>> import copy # Подключаем модуль copy >>> x = [1, 2] >>> y = [x, x] # Два элемента ссылаются на один объект >>> y [[1, 2], [1, 2]] >>> z = copy.deepcopy(y) # Сделали копию списка >>> z[0] is x, z[1] is x, z[0] is z[1] (False, False, True) >>> z[0][0] = 300 # Изменили один элемент >>> z # Значение изменилось сразу в двух элементах! [[300, 2], [300, 2]] >>> x # Начальный список не изменился [1, 2] Операции над списками >>> arr = [1, "str", 3.2, "4"] >>> arr[0], arr[1], arr[2], arr[3] (1, 'str', 3.2, '4')
>>> x, y, z = [1, 2, 3] # Позиционное присваивание >>> x, y, z (1, 2, 3) >>> x, y = [1, 2, 3] # Количество элементов должно совпадать Traceback (most recent call last): File "<pyshell#86>", line 1, in <module> x, y = [1, 2, 3] # Количество элементов должно совпадать ValueError: too many values to unpack (expected 2)
>>> x, y, *z = [1, 2, 3]; x, y, z (1, 2, [3]) >>> x, y, *z = [1, 2, 3, 4, 5]; x, y, z (1, 2, [3, 4, 5]) >>> x, y, *z = [1, 2]; x, y, z (1, 2, []) >>> *x, y, z = [1, 2]; x, y, z ([], 1, 2) >>> x, *y, z = [1, 2, 3, 4, 5]; x, y, z (1, [2, 3, 4], 5) >>> *z, = [1, 2, 3, 4, 5]; z [1, 2, 3, 4, 5]
>>> arr = [1, 2, 3, 4, 5] >>> len(arr) # Получаем количество элементов >>> arr[len(arr)-1] # Получаем последний элемент
>>> arr = [1, 2, 3, 4, 5] >>> arr[5] # Обращение к несуществующему элементу Traceback (most recent call last): File "<pyshell#99>", line 1, in <module> arr[5] # Обращение к несуществующему элементу IndexError: list index out of range
>>> arr = [1, 2, 3, 4, 5] >>> arr[-1], arr[len(arr)-1] # Обращение к последнему элементу (5, 5)
>>> arr = [1, 2, 3, 4, 5] >>> arr[0] = 600 # Изменение элемента по индексу >>> arr [600, 2, 3, 4, 5]
>>> arr = [1, 2, 3, 4, 5] >>> m = arr[:]; m # Создаем поверхностную копию и выводим значения [1, 2, 3, 4, 5] >>> m is arr # Оператор is показывает, что это разные объекты False
>>> arr = [1, 2, 3, 4, 5] >>> arr[::-1] # Шаг -1 [5, 4, 3, 2, 1]
>>> arr[1:] # Без первого элемента [2, 3, 4, 5] >>> arr[:-1] # Без последнего элемента [1, 2, 3, 4]
>>> arr[0:2] # Символ с индексом 2 не входит в диапазон [1, 2]
>>> arr[-1:] # Последний элемент списка [5]
>>> arr[1:4] # Возвращаются элементы с индексами 1, 2 и 3 [2, 3, 4]
>>> arr = [1, 2, 3, 4, 5] >>> arr[1:3] = [6, 7] # Изменяем значения элементов с индексами 1 и 2 >>> arr [1, 6, 7, 4, 5] >>> arr[1:3] = [] # Удаляем элементы с индексами 1 и 2 >>> arr [1, 4, 5]
>>> arr1 = [1, 2, 3, 4, 5] >>> arr2 = [6, 7, 8, 9] >>> arr3 = arr1 + arr2 >>> arr3 [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> arr = [1, 2, 3, 4, 5] >>> arr += [6, 7, 8, 9] >>> arr [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [1, 2, 3] * 3 # Операция повторения [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> 2 in [1, 2, 3, 4, 5], 6 in [1, 2, 3, 4, 5] # Проверка на вхождение (True, False) Многомерные списки >>> arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
>>> arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
>>> arr[1][1]
>>> arr = [ [1, ["a", "b"], 3], [4, 5, 6], [7, 8, 9] ] >>> arr[0][1][0] 'a' >>> arr = [ [1, { "a": 10, "b": ["s", 5] } ] ] >>> arr[0][1]["b"][0] 's' Перебор элементов списка >>> arr = [1, 2, 3, 4, 5] >>> for i in arr: print(i, end=" ")
1 2 3 4 5
>>> arr = [1, 2, 3, 4] # Элементы имеют неизменяемый тип (число) >>> for i in arr: i += 10
>>> arr # Список не изменился [1, 2, 3, 4] >>> arr = [ [1, 2], [3, 4] ] # Элементы имеют изменяемый тип (список) >>> for i in arr: i[0] += 10 >>> arr # Список изменился [[11, 2], [13, 4]]
arr = [1, 2, 3, 4] for i in range(len(arr)): arr[i] *= 2 print(arr) # Результат выполнения: [2, 4, 6, 8]
arr = [1, 2, 3, 4] for i, elem in enumerate(arr): arr[i] *= 2 print(arr) # Результат выполнения: [2, 4, 6, 8]
arr = [1, 2, 3, 4] i, c = 0, len(arr) while i < c: arr[i] *= 2 i += 1 print(arr) # Результат выполнения: [2, 4, 6, 8]
|
||||
Последнее изменение этой страницы: 2016-06-23; просмотров: 223; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.176.228 (0.01 с.) |