无法使regex与Python一起工作

2024-05-12 23:42:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

它可以与regex测试人员一起工作(与一些文本一起检查-星期一,2013年8月19日),但是Python似乎不理解它。我得到的结果是:

>>> 
['August']
>>> 

有人能理解我为什么会这样吗?你知道吗

谢谢你!你知道吗


Tags: 格式julymayddmarchaugustmonthjune
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'

看到这一点,我猜测(因为您没有展示您实际是如何使用这个regex的)您正在做group(1),它现在将与我上面提供的regex一起工作。你知道吗

看起来你还可以使用group(0)来获取整个过程(如果我的假设是正确的,你就是这么做的)。这将工作在您的原始正则表达式以及我的修改版本。你知道吗

你用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})

如果需要处理单独的日/月/年组件,则后一种形式更有用。你知道吗

相关问题 更多 >