我需要以以下格式提取日期: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']
>>>
有人可以理解我为什么会这样吗?
谢谢!
答案 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)
来获取整个事情(如果我认为这是你正在做的事情是正确的)。这适用于您的原始正则表达式以及我的修改版本。