• $ matches the end of a string.
• \b matches a word boundary.
• \d matches any numeric digit.
• \D matches any non-numeric character.
• x? matches an optional x character (in other words, it matches an x zero or one times).
• x* matches x zero or more times.
• x+ matches x one or more times.
• x{n,m} matches an x character at least n times, but not more than m times.
• (a|b|c) matches either a or b or c.
• (x) in general is a remembered group. You can get the value of what matched by using the groups() method of the object returned by re.search.
e.g. phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')
print(phonePattern.search('800-555-1212').groups())
print(phonePattern.search('(800)5551212 ext. 1234').groups())
print(phonePattern.search('work 1-(800) 555.1212 #1234').groups())