Поиск первого совпадения с шаблоном 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Поиск первого совпадения с шаблоном



>>> 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; просмотров: 198; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.44.223 (0.239 с.)