如何在Python正则表达式中匹配 - 但不捕获 - ?

Mat*_*lla 11 python regex

我有一个函数吐出"华盛顿特区,美国华盛顿特区"作为输出.我需要捕捉"华盛顿特区",其原因与我如何处理该国其他城市有关.(注意:这与"DC" 一样,我需要逗号在"华盛顿"和"DC"之间,空格很好)

我不能为我的生活弄清楚如何捕获这个.

这是我尝试过的:

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

    >>>match = re.search(r'\w+\s(?:D\.C\.), \w\w(?=\W)', location).group()
    >>>match
    u'Washington D.C., DC'
Run Code Online (Sandbox Code Playgroud)

不是(?:...)应该匹配(而不是捕获)"DC"?

以下是2.7.2文档:

(?:...)常规括号的非捕获版本.匹配括号内的正则表达式,但在执行匹配或稍后在模式中引用后,无法检索组匹配的子字符串.

是什么赋予了??

提前致谢!

tom*_*asz 10

这确实是一种聪明的方式,但不是捕获并不意味着将其从匹配中删除.它只是意味着,它不被视为输出组.

您应该尝试执行类似以下操作:

match = re.search(r'(\w+)\s(?:D\.C\.), (\w\w)\W', location).groups()
Run Code Online (Sandbox Code Playgroud)

这打印('Washington', 'DC').

注意之间的差异.group().groups().前者为您提供匹配的整个字符串,后者仅为捕获的组.请记住,您需要指定要包含在输出中的内容,而不是要排除的内容.


Pho*_*hob 6

matches = re.search(r'(\w+\s)(?:D\.C\.)(, \w\w)(?=\W)', location).group(1,2)
match = ''.join(matches)
Run Code Online (Sandbox Code Playgroud)

当它说它是"非捕获"时,这意味着它不会为它创建一个单独的捕获组.文字"DC"仍在比赛中.请参见http://docs.python.org/library/re.html#match-objects