捕获两个可选组

时间:2013-11-21 16:48:02

标签: python regex

我想捕获序列' AE'之前的单词(如果有的话)或序列' BE'之前的单词(如果有的话),或两个单词出现在字符串中的两个单词。

我尝试使用以下正则表达式:

TEST = re.compile(
    r'(.*?)'
    r'(?:(\w+) AE)?'
    r'.*?'
    r'(?:(\w+) BE)?')

它捕获' BE'之前的单词或' AE'之前的单词但不捕获 两个字。

>>> TEST.match('').groups()
('', None, None)
>>> TEST.match('foo AE').groups()
('', 'foo', None)
>>> TEST.match('foo BE').groups()
('', None, 'foo')
>>> TEST.match('foo AE bar BE').groups()
('', 'foo', None)

相反,我希望输出的最后一行是

>>> TEST.match('foo AE bar BE').groups()
('', 'foo', 'bar')

1 个答案:

答案 0 :(得分:1)

使用RegexObject.findall

>>> pattern = re.compile(r'\s*(.*?)\s*(?:AE|BE)')
>>>
>>> pattern.findall('')
[]
>>> pattern.findall('bar BE')
['bar']
>>> pattern.findall('foo AE')
['foo']
>>> pattern.findall('foo AE bar BE')
['foo', 'bar']