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 Negation

Aleksandar Stankovic
seal-mask
.a{fill-rule:evenodd;}techdegree
Aleksandar Stankovic
Python Development Techdegree Student 9,648 Points

A small error in code?

Hello guys, I am really into these lectures, they are really good and I am enjoying them, after the OOP this is a bit like relaxation. Anyway, I tested and played around with this code in my own workspace, and found out that there is a small error in the code that Kenneth presented us in this lesson(code about names and jobs). I found out that the code does not reads(finds) the first word in a Job( if we have two words in a job, before the comma, like "Sith Lord" or "Time Lord), code reads only the second word. In order to fix that, I "made" a space in the first set, after \w : \b[-\w ]+,

With this space, we cover also the first word for Jobs that have two words. Besides that very tinny thing, Kenneth is awesome here. I guess that OOP is really a level for itself.

3 Answers

Steven Parker
Steven Parker
210,867 Points

The beginning of a string should count as a word boundary, so you probably have some other issue that affects the result.

If you need help finding it, show your code (perhaps by making a snapshot of your workspace and posting the link to it here).

Steven Parker
Steven Parker
210,867 Points

I see now. And the effect of the original is visible on the screen in the video. The original regex specifies "the word followed by a comma", but with the space added it expands it to "any number of words followed by a comma"

So I'd suggest you report this to the staff as a bug, as described on the Support page. They might add something to the Teacher's Notes (and give you an "Exterminator" badge :beetle:)!

Aleksandar Stankovic
seal-mask
.a{fill-rule:evenodd;}techdegree
Aleksandar Stankovic
Python Development Techdegree Student 9,648 Points

Hello, thanks for the quick response. Here is my code:

```names = (re.findall(r""" \b[-\w ]+, # find a word boundary, 1+(1 or more) hypnes or characters, and comma \s # find 1 whitespace [-\w ]+ # find 1+(1 or more) hypnes or characters, and explicit spaces [^\t\n] # Ignore tabs and newlines """, data, re.VERBOSE|re.IGNORECASE))

print(names)```

The only difference with Kenneth's code is that I made whitespace after the -\w in the first set. it gave me full results, however in Kenneth's example, in the results, we did not get the "Sith" and "Time" for the job.

Hermes d'Henares
Hermes d'Henares
2,743 Points

Actually, to correct Kenneth's code in full you should also remove the \b from the begining of the string. This will allow you to match ', Tim'. I believe --don't know for certain-- that an empty string has nos boundaries. So it seems that with \b you are telling RegEx to look for non-empty strings.

The code should be like this:

print(re.findall(r'''
    [-\w ]*,
    \s
    [-\w ]+
    [^\t\n]
''', data, re.X))