Основы регулярных выражений (суть быстрого старта Python, помните 04)

глубокое обучение

Обзор


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


Общие шаги по использованию re:


1. Сначала скомпилируйте строковую форму регулярного выражения в экземпляр Pattern: re.compile(strPattern[ flag])


2. Используйте экземпляр Pattern для обработки текста и получения результата сопоставления, который является экземпляром Match: re.match(pattern, string, flags=0)


3. Наконец, используйте экземпляр Match для получения информации, удобной для других операций: group() и т.д.


как:

import re
s1="hello World!"
s2="helloWorld!"
s3="hello World"
s4="hello 猪八戒!"
r=re.compile(r"hello\s(\w)+\!",re.I)
print r,'\n\n',r.match(s1),'\n'
print r.match(s1).group(),'\n'
print r.match(s2),r.match(s3),r.match(s4),'\n'

\

результат операции:

\

<_sre.SRE_Pattern object at 0x000000000AAB1D50> 

<_sre.SRE_Match object at 0x000000000AD2BA80> 

hello World! 

None None None \

\

двоичный символ

\

Метасимвол — это символ или набор символов, которые заменяют один или несколько символов.

\

\

\

Примечание: "\" используется в качестве escape-символа в регулярных выражениях. Чтобы соответствовать исходному символу "\", необходимы четыре обратных слэша "\\": первые два и последние два используются для экранирования в языке программирования. , Определяется как обратная косая черта, преобразованная в две обратные косые черты, а затем преобразованная в одну обратную косую черту в регулярном выражении. Необработанные строки в Python могут быть представлены с помощью r"\" в регулярных выражениях. Аналогично, "\d", совпадающее с цифрой, может быть записано как r"\d".

\

Три модификатора регулярных выражений

\

\

\

Четыре объекта Pattern

\

Объект Pattern представляет собой скомпилированное регулярное выражение, и текст можно сопоставлять и искать с помощью ряда методов, предоставляемых Pattern. Шаблон создается с использованием re.compile() и не может быть создан напрямую.

\

Атрибуты:

1. шаблон: Строка выражения, используемая во время компиляции. 

2. flags: режим сопоставления, используемый во время компиляции. цифровая форма. 

3. группы: количество групп в выражении. 

4. groupindex: словарь с псевдонимом группы с псевдонимом в выражении в качестве ключа и числом, соответствующим группе, в качестве значения, а группа без псевдонима не включена.

как:

p=re.compile(r"(hello)\s(\w+)(?P<last>\!)",re.S)
print "p.pattern:", p.pattern
print "p.flags:", p.flags
print "p.groups:", p.groups
print "p.groupindex:", p.groupindex


результат:

p.pattern: (hello)\s(\w+)(?P<last>\!)
p.flags: 16
p.groups: 3
p.groupindex: {'last': 3}\

\


метод:

Может использовать findall, finditer, match, search, split, sub, subn и другие функции.
как:

s='''kobe star
lebron star
paul star'''
print re.match('k\w+',s)
print re.search('k\w+',s)
print re.search('k\w+',s).group(),'\n'

p = re.compile(r'(\w+) (\w+)')
s = 'i say, hello world!'

print p.match(s).group(1)
print p.match(s).group(2)

print p.sub(r'\2 \1', s,1)

def func(m):
    return m.group(1).title() + ' ' + m.group(2).title()
print p.sub(func, s)


результат:

<_sre.SRE_Match object at 0x000000000AC41E68>
<_sre.SRE_Match object at 0x000000000AC41E68>
kobe 


i
say
say i, hello world!
I Say, Hello World!\




Пять объектов Match


Атрибуты:

1. строка: текст, используемый при сопоставлении. 2. re: Объект шаблона, используемый при сопоставлении.
3. pos: индекс в тексте, с которого регулярное выражение начинает поиск. Значение совпадает с одноименным параметром методов Pattern.match() и Pattern.seach().
4. endpos: Индекс в тексте, где регулярное выражение заканчивает поиск. Значение совпадает с одноименным параметром методов Pattern.match() и Pattern.seach(). 
5. lastindex: Индекс последней захваченной группы в тексте. Будет None, если нет захваченных пакетов.
6. lastgroup: Псевдоним последней захваченной группы. Будет None, если у этого пакета нет псевдонимов или нет захваченных пакетов.
метод:

1. group([group1, …]): Получить одну или несколько строк, перехваченных группами, при указании нескольких параметров она будет возвращена в виде кортежа. group1 может использовать либо число, либо псевдоним; число 0 представляет всю совпавшую подстроку; если ни один параметр не заполнен, возвращается группа (0); группа без перехваченной строки возвращает None; группа, которая была перехвачена несколько раз, возвращает последняя перехваченная строка подстроки. 
2.groups([по умолчанию]): возвращает все группы перехваченных строк в виде кортежей. Эквивалент вызывающей группы (1,2,…последняя). default указывает, что группы, которые не перехватывают строки, заменяются этим значением, а значение по умолчанию — None. 
3.groupdict([по умолчанию]): возвращает словарь с псевдонимом группы с псевдонимом в качестве ключа и подстрокой, перехваченной группой в качестве значения.Группы без псевдонимов не включаются. Значение по умолчанию такое же, как указано выше. 
4.start([group]): возвращает начальный индекс подстроки, захваченной указанной группой в строке (индекс первого символа подстроки). Значение группы по умолчанию равно 0. 
5.end([group]): возвращает конечный индекс подстроки, перехваченной указанной группой в строке (индекс последнего символа подстроки + 1). Значение группы по умолчанию равно 0. 
6.span([группа]): return(начало(группа), конец(группа)). 

как:

m=re.match(r"(hello)\s(\w+)(?P<last>\!)","hello World!")
print m.group()
print "m.string:", m.string
print "m.re:", m.re
print "m.pos:", m.pos
print "m.endpos:", m.endpos
print "m.lastindex:", m.lastindex
print "m.lastgroup:", m.lastgroup
print "m.group(1,2):", m.group(1, 2)
print "m.groups():", m.groups()
print "m.groupdict():", m.groupdict()
print "m.start(2):", m.start(2)
print "m.end(2):", m.end(2)
print "m.span(2):", m.span(2)
print r"m.expand(r'\2 \1 \3'):", m.expand(r"\2 \1 \3"),'\n'




вывод:

hello World!
m.string: hello World!
m.re: <_sre.SRE_Pattern object at 0x000000000AC3F148>
m.pos: 0
m.endpos: 12
m.lastindex: 3
m.lastgroup: last
m.group(1,2): ('hello', 'World')
m.groups(): ('hello', 'World', '!')
m.groupdict(): {'last': '!'}
m.start(2): 6
m.end(2): 11
m.span(2): (6, 11)
m.expand(r'\2 \1 \3'): World hello !





\