Python Regex展望未捕获组未按预期工作

Python Regex展望未捕获组未按预期工作,python,regex,regex-lookarounds,Python,Regex,Regex Lookarounds,下面是我想从中提取月份(本例中为7月份)的文本。 word\u模式确保文本包含这些单词, 而month\u模式将提取月份。所以首先我要验证这段文字 包含某些单词,如果包含,则尝试提取month 当这些模式单独使用时,它们会得到匹配,但是如果我尝试将它们组合起来 我最后没有火柴了。 我不知道我做错了什么 import re text = ''' The number of shares of the registrant’s common stock outstanding as of July

下面是我想从中提取月份(本例中为7月份)的文本。
word\u模式
确保文本包含这些单词, 而
month\u模式
将提取月份。所以首先我要验证这段文字 包含某些单词,如果包含,则尝试提取
month

当这些模式单独使用时,它们会得到匹配,但是如果我尝试将它们组合起来 我最后没有火柴了。 我不知道我做错了什么

import re

text = ''' The number of shares of the
registrant’s common stock outstanding as
of July 31, 2017 was 52,833,429.'''

# patterns
word_pattern = r'(?=.*outstanding[.,]?)(?=.*common)(?=.*shares)'

month_pattern = r'(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)'


pattern = word_pattern + month_pattern

print(re.search(pattern, text, flags = re.IGNORECASE|re.DOTALL))
预期结果:


正则表达式不能像那样轻松地连接起来。问题是,您的单词模式只使用lookaheads,因此不会向前移动位置,当月份仅显示在字符串中间时,这会成为一个问题。因此,您需要使用一个弥合差距的量词,例如
*
Try,允许光标前进到月份位置

(?=.*outstanding[.,]?)(?=.*common)(?=.*shares).*(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)

或者
pattern=word\u pattern+'.'+month\u pattern
应该可以

结果可在捕获组1中找到:
re.search(…).group(1)