尝试编写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', '', '', '')]
只需要第一个元素。我不想要不精确的比赛,我该如何删除它们。
谢谢,
程
答案 0 :(得分: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']
答案 1 :(得分:0)
他们不是“不精确的比赛”。元组中的第一项对应于匹配的字符串,其他项对应于正则表达式中括号中的部分。
如果字符串中有多个日期,您需要这样:
reg = re.compile(...)
dates = [match[0] for match in reg.findall(text, re.IGNORE_CASE)]