re.findall()在使用选项时返回错误的值

时间:2016-09-18 08:16:03

标签: python regex

我正在跟进一个教程,我似乎陷入了一件似乎很容易做的事情:

numRegex = re.compile(r'\d+(\s+\w+)?')
spam = numRegex.findall("my address is   999 Street Ave City CA 95014 x")
print(len(spam))
print(spam)

这会返回[' Street', ' x'],这显然是错误的,因为它应该是['999 Street', '95014 x']

1 个答案:

答案 0 :(得分:0)

您正在错误地捕获该群组。尝试:

numRegex = re.compile(r'(\d+(?:\s+\w+)?)')

或者,

numRegex = re.compile(r'\d+(?:\s+\w+)?')

\d+(\s+\w+)?寻找整个模式,但仅匹配(\s+\w+)部分,因为这是捕获组。

您需要匹配整个模式。因此,您应该在整个模式上添加一个括号,以匹配作为捕获组的整个模式。

现在,您有一个嵌套捕获组(\s+\w+)?。您需要将其设为非捕获组。因此,在括号内添加?:以获得效果。