Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Regular Expressions in Python Introduction to Regular Expressions Email Groups

Nathan McElwain
Nathan McElwain
4,575 Points

error: bad character range

I keep getting this error 'bad character range'. I'm unable to decipher what I did in error here, and moreover, what was the "bad character range". I imagine it has something to do with the hyphens in the sets, but they're placed by themselves, not between numbers or letters.

emails.py
import re

string = '''Love, Kenneth, kenneth+challenge@teamtreehouse.com, 555-555-5555, @kennethlove
Chalkley, Andrew, andrew@teamtreehouse.co.uk, 555-555-5556, @chalkers
McFarland, Dave, dave.mcfarland@teamtreehouse.com, 555-555-5557, @davemcfarland
Kesten, Joy, joy@teamtreehouse.com, 555-555-5558, @joykesten'''

contacts = re.search(r'''
    ^(?P<email>[-\w\d.+]+@[-\w\d.]+),\t
    (?P<phone>[\d{3}-\d{3}-\d{4}])$
''', string, re.X|re.M)

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,457 Points

Very Close! Just a few adjustments: Remove the ^ and the $ as they mark matching from the begining of a line and matching to the end of a line. Since you're not matching on the name or twitter name, your pattern doesn't hit the start or end of the line. Second, remove the [ ] around the phone digits. They're used to mark a character range (hence the error). Corrected solution below.

contacts = re.search(r'''
    (?P<email>[-\w\d.+]+@[-\w\d.]+),\s+
    (?P<phone>\d{3}-\d{3}-\d{4})
''', string, re.X|re.M)
Nathan McElwain
Nathan McElwain
4,575 Points

ah ha! I guess I misunderstood the ^/$ function. I thought it made the patterns run line by line, but I guess that doesn't really make sense. Oh well, live and learn! And now I have. Thank you once again!