0

尝试编写一个 RE 来识别 Python 中的日期格式 mm/dd

reg = "(((1[0-2])|(0?[1-9]))/((1[0-9])|(2[0-9])|(3[0-1])|(0?[0-9])))"
match = re.findall(reg, text, re.IGNORECASE)
print match

对于 text = '4/13' 它给了我 [('4/13', '4', '', '4', '13', '13', '', '', '')]

只需要第一个元素。我不想要不精确的匹配,我该如何删除它们。

谢谢,

4

2 回答 2

1

您将获得所有这些匹配项,因为正则表达式中的每组括号都会生成一个匹配组。(?:...)如果您确实不希望结果集中包含组,则可以使用非分组匹配,例如。您也可以简单地从列表中取出第一项并忽略其他项。

这将使您的表达式看起来像:

reg = "((?:(?:1[0-2])|(?:0?[1-9]))/(?:(?:1[0-9])|(?:2[0-9])|(?:3[0-1])|(?:0?[0-9])))"

有关更多信息,请参阅re文档。

这是一个完整的例子:

>>> text='4/13'
>>> reg = "((?:(?:1[0-2])|(?:0?[1-9]))/(?:(?:1[0-9])|(?:2[0-9])|(?:3[0-1])|(?:0?[0-9])))"
>>> re.findall(reg, text, re.IGNORECASE)
['4/13']
于 2012-05-07T15:33:29.287 回答
0

它们不是“不完全匹配”。元组中的第一项对应于匹配的字符串,其他项对应于正则表达式中括号中的部分。

如果字符串中有多个日期,则需要:

reg = re.compile(...)
dates = [match[0] for match in reg.findall(text, re.IGNORE_CASE)]
于 2012-05-07T15:36:03.357 回答