我有一个函数吐出"华盛顿特区,美国华盛顿特区"作为输出.我需要捕捉"华盛顿特区",其原因与我如何处理该国其他城市有关.(注意:这与"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()
.前者为您提供匹配的整个字符串,后者仅为捕获的组.请记住,您需要指定要包含在输出中的内容,而不是要排除的内容.
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