无法使用Python进行正则表达式

时间:2013-08-19 21:09:54

标签: python regex

我需要以以下格式提取日期:dd Month yyyy(2013年8月20日)。 我尝试了以下正则表达式:

\d{2} (January|February|March|April|May|June|July|August|September|October|November|December) \d{4}

它适用于正则表达式测试人员(与几个文本一起编辑 - 2013年8月19日星期一),但似乎Python不理解它。我得到的输出是:

>>> 
['August']
>>> 

有人可以理解我为什么会这样吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您使用re.findall了吗?默认情况下,如果模式中至少有一个捕获组,re.findall将仅返回表达式的捕获部分。

您可以通过删除每个捕获组来避免这种情况,从而导致re.findall返回整个匹配项:

\d{2} (?:January|February|...|December) \d{4}

或制作一个大型捕获组:

(\d{2} (?:January|February|...|December) \d{4})

或者,通过使每个组件成为捕获组,可能更方便:

(\d{2}) (January|February|...|December) (\d{4})

如果您需要处理单个日/月/年组件,则后一种形式更有用。

答案 1 :(得分:2)

看起来你只是从捕获组获取数据,试试这个:

(\d{2} (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{4})

我在整个事情周围设置了一个捕获组,并使该月成为非捕获组。现在无论给你什么“八月”都应该给你全部。


我只是看了一些python正则表达式的东西here

>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
'abcd'
>>> m.group(1)
'abc'
>>> m.group(2)
'b'

看到这个,我猜测(因为你没有显示你实际上是如何使用这个正则表达式)你正在做的group(1)现在可以使用我上面提供的正则表达式。

看起来你也可以使用group(0)来获取整个事情(如果我认为这是你正在做的事情是正确的)。这适用于您的原始正则表达式以及我的修改版本。