Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python Regular Expressions in Python Introduction to Regular Expressions Players Dictionary and Class

Sandu Gabriel
Sandu Gabriel
2,563 Points

I don't understand what I have to do to get this problem solved

I do not understand the question really

players.py
import re

string = '''Love, Kenneth: 20
Chalkley, Andrew: 25
McFarland, Dave: 10
Kesten, Joy: 22
Stewart Pinchback, Pinckney Benton: 18'''

players = re.search(r'''
(?P<last_name>[\w]+\s?[\w]+?),
\s(?P<first_name>[\w]+\s?[\w]+?):
\s(?P<score>\d{2})
''', string, re.MULTILINE | re.VERBOSE)

class Player:
    def __init__(self, text, matches):
        for match in matches.finditer(text):
            self.last_name = match.group('last_name')
            self.first_name = match.group('first_name')
            self.score = match.group('score')

2 Answers

Øyvind Andreassen
Øyvind Andreassen
16,839 Points

Hey Sandu Gabriel,

I think you're overthinking this. Re-read what the question actually asks.

Create a variable named players that is an re.search() or re.match() to capture three groups: last_name, first_name, and score. It should include re.MULTILINE.

There is no mention of creating an object for each of the players, just to catch them in one variable.

You're regex is also a bit of, I always use regex101.com when I write regex since they break it down for you.

A correct pattern for this challenge is:

^(?P<last_name>\w*\s?\w*)\,\s(?P<first_name>\w*\s?\w*)\:\s(?P<score>\d*)$

Let's examine what this pattern looks for: Last Name: At the start of the line look for a words of any length but with an optional whitespace and a following word of any length. The look for a comma and whitespace. First Name: Same pattern as Last Name. Then look for colons and a whitespace. Score should be a number of any length. Then we are at the end of the line.

So the solution can look like this, and will pass the challenge.

players = re.search(r'''
                    ^(?P<last_name>\w*\s?\w*)\,\s(?P<first_name>\w*\s?\w*)\:\s(?P<score>\d*)$
                   ''', string, re.X | re.M)

thanks happy coding.....

Hey nice code andreeason. Could you also help me with this? Why does my code give an 'players doesn't seem to be a regex object' errror? Thanks in advance

import re

string = '''Love, Kenneth: 20
Chalkley, Andrew: 25
McFarland, Dave: 10
Kesten, Joy: 22
Stewart Pinchback, Pinckney Benton: 18'''

players = re.match(r'''
^(?P<last_name>-?\w*\s?\w*)
\,\s
(?P<first_name>-\w*\s\w*)
\:\s
(?P<score>\d{2})$
''', string, re.X|re.M)