1. (?:...) 不想保存括号里匹配项时使用
The (?:...) notation should be fairly popular; with it, you can group
parts of a regex, but it does not save them for future retrieval or use.
>>> re.findall(r'http://(?:w+.)*(w+.com)', 'http://google.com http://www.google.com http://code.google.com') ['google.com', 'google.com', 'google.com']
2.(?P<name>) and (?P=name)
can use the (?P<name>) and (?P=name) notations together. The former
saves matches by using a name identifier rather than using increasing
numbers, starting at one and going through N, which are then retrieved
later by using 1, 2, ... N.
>>> re.search(r'((?P<areacode>d{3})) (?P<prefix>d{3})-(?:d{4})', '(800) 555-1212').groupdict() {'areacode': '800', 'prefix': '555'}
3.findall() and finditer();
>>> re.findall(r'w+(?= van Rossum)', ''' Guido van Rossum Tim Peters Alex Martelli Just van Rossum ''') ['Guido', 'Just']
>>> bool(re.search(r'(?:(x)|y)(?(1)y|x)', 'xy')) True >>> bool(re.search(r'(?:(x)|y)(?(1)y|x)', 'yx')) True