'[Ab] +' равно '(a | b) +' в модуле Python re?

python regex python-2.7

267 просмотра

1 ответ

Я думаю, что pat1 = '[ab]' и pat2 = 'a | b' имеют ту же функцию в модуле 're' Python (python2.7, windows), что и шаблон регулярного выражения. Но меня смущают '[ab] +' и '(a | b) +', имеют ли они одинаковую функцию, если не можете, вы можете объяснить детали.

'''
Created on 2012-9-4

@author: melo
'''

import re
pat1 = '(a|b)+'
pat2 = '[ab]+'
text = '22ababbbaa33aaa44b55bb66abaa77babab88'

m1 = re.search(pat1, text)
m2 = re.search(pat2, text)
print 'search with pat1:', m1.group()
print 'search with pat2:', m2.group()

m11 = re.split(pat1, text)
m22 = re.split(pat2, text)
print 'split with pat1:', m11
print 'split with pat2:', m22

m111 = re.findall(pat1, text)
m222 = re.findall(pat2, text)
print 'findall with pat1:', m111
print 'findall with pat2:', m222

вывод, как показано ниже:

search with pat1: ababbbaa
search with pat2: ababbbaa
split with pat1: ['22', 'a', '33', 'a', '44', 'b', '55', 'b', '66', 'a', '77', 'b', '88']
split with pat2: ['22', '33', '44', '55', '66', '77', '88']
findall with pat1: ['a', 'a', 'b', 'b', 'a', 'b']
findall with pat2: ['ababbbaa', 'aaa', 'b', 'bb', 'abaa', 'babab']

почему 'pat1' и 'pat2' разные и в чем их разница? с какими строками на самом деле может соответствовать pat1?

Автор: imsrch Источник Размещён: 12.11.2019 09:21

Ответы (1)


10 плюса

Решение

У вас есть группа захвата в первом шаблоне.

Согласно документам ,

re.split ()
... Если в шаблоне используются захватывающие скобки , то текст всех групп в шаблоне также возвращается как часть результирующего списка. ...

Попробуйте сделать группу без захвата и посмотрите, получите ли вы то, что ожидаете:

pat1 = '(?:a|b)+'
Автор: Wiseguy Размещён: 10.09.2012 04:02
Вопросы из категории :
32x32