Обзор
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 !
\