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 trialBratamalya Das Gupta
253 PointsCan you tell me why my solution is incorrect?
I get this error: Bummer: Didn't get the right capture. Got "teamtreehouse.com, 555-555-5555, @kennethlove".
I think the regular expression is not able to differentiate the email group from the twitter handle group. But Why?
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'[\w, ]* (?P<email>[-\w+.]+@[\w+.]+), (?P<phone>[0-9]{3}-[0-9]{3}-[0-9]{4})',string,re.M)
twitters=re.search(r'[-+\w\d,. ]* (?P<twitter>@[\w]+)$',string,re.M)
1 Answer
Alex Koumparos
Python Development Techdegree Student 36,887 PointsHi Bratamalya,
The issue is the distinction between the match and the capture group. In your twitters
case, your regex creates a match as follows:
>>> twitters=re.search(r'[-+\w\d,. ]* (?P<twitter>@[\w]+)$',string,re.M)
>>> twitters
<re.Match object; span=(33, 78), match='teamtreehouse.com, 555-555-5555, @kennethlove'>
Observe that the match contains all the text (-
, +
, \w
, and \d
) characters leading up to the start of the twitter handle. Within the match, you have a capture group called twitter
which is the part within the match representing the twitter handle:
>>> twitters.groupdict()
{'twitter': '@kennethlove'}
Since the challenge wants you to return a match object where the whole match is the twitter handle, all you need to do is remove the parts of your match that aren't part of the twitter handle. Thus:
>>> just_twitter_match = re.search(r'(?P<twitter>@[\w]+)$',string,re.M)
And since the challenge isn't asking for a capture group at all, we can even omit that:
>>> just_twitter_match_no_group = re.search(r'@[\w]+$',string,re.M)
Hope that's clear.
Cheers,
Alex
frankgenova
Python Web Development Techdegree Student 15,616 Pointsfrankgenova
Python Web Development Techdegree Student 15,616 PointsIt has been a while since I did this challenge, but I still have my code. I explicitly included the ability to capture an email address that had digits in it. For example "jimmy1989@aol.com". You might think about the possibility of digits in your twitter regex as well. You could see if this helps it pass the challenge. Right now it isn't parsing the first email correctly so that is where you need to focus.
Also, I believe that \d is the same as [0-9]
Finally, I find these websites helpful to test/manipulate regex to understand how they can be built up.