正则表达式模式匹配两种日期时间格式

时间:2014-02-14 08:19:46

标签: python regex

我正在进行目录监听,需要获取遵循该模式的所有目录名称:Feb14-201414022014-sometext。目录名称不得包含点,因此我不想匹配14022014-sometext.more。就像你可以看到我想只匹配模式%b%d-%Y%d%m%Y-textofanylengthWithoutDots之后的目录。

对于第一种情况,它应该是[a-zA-Z]{3}\d{2}。我不知道如何解析其余的因为我的正则表达能力很差,对不起。所以我希望有人能告诉我正确的模式是什么样的。感谢。

2 个答案:

答案 0 :(得分:0)

这很容易。 我能做的最好的是:

((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d\d-\d\d\d\d)|(\d\d\d\d\d\d\d\d-\w+)

第一部分((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d\d-\d\d\d\d)与第一部分日期匹配,第二部分(\d\d\d\d\d\d\d\d-\w+)匹配第二部分。

答案 1 :(得分:0)

我假设每个目录列表都用新行分隔

([A-Z]\w{2}\d{1,2}\-\d{4}|\d{7,8}\-\w+)$

将匹配这两种情况并且仅在文本不间断时(通过点或其他任何内容)匹配文本,直到它到达行尾。

一些注意事项:

  • 如果您想匹配除dot之外的所有内容,您可以将\w+替换为[^.]+
  • 您需要使用多行修饰符/m才能生效,否则$将仅匹配字符串的结尾。
  • 我没有在正则表达式的开头添加^,但如果每行包含一个目录,则可以这样做
  • 当然,您可以展开此正则表达式以包含(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)而不是[A-Z]\w{2}。我没有这样做是为了保持它的可读性。我还建议您将其存储在python数组中,并将其动态插入到正则表达式中以保持可维护性。

查看实际操作:http://regex101.com/r/pS6iY9