Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I've got a function spitting out "Washington D.C., DC, USA" as output. I need to capture "Washington, DC" for reasons that have to do with how I handle every single other city in the country. (Note: this is not the same as "D.C.", I need the comma to be between "Washington" and "DC", whitespace is fine)

I can't for the life of me figure out how to capture this.

Here's what I've tried:

    >>>location = "Washington D.C., DC, USA"

    >>>match = re.search(r'w+s(?:D.C.), ww(?=W)', location).group()
    >>>match
    u'Washington D.C., DC'

Is not (?: ...) supposed to just match (and not capture) "D.C."?

Here are the 2.7.2 Docs:

(?:...) A non-capturing version of regular parentheses. Matches whatever regular expression is inside the parentheses, but the substring matched by the group cannot be retrieved after performing a match or referenced later in the pattern.

What gives??

Thanks in advance!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
764 views
Welcome To Ask or Share your Answers For Others

1 Answer

That's a clever way indeed, but not-capturing doesn't mean removing it from match. It just mean, that it's not considered as an output group.

You should try to do something similar to the following:

match = re.search(r'(w+)s(?:D.C.), (ww)W', location).groups()

This prints ('Washington', 'DC').

Note the difference between .group() and .groups(). The former gives you the whole string that was matched, the latter only the captured groups. Remember, you need to specify what you want to include in the output, not what you want to exclude.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...