2014-02-14 74 views
2

我正在做一个目录侦听,并需要获取所有遵循该模式的目录名称:Feb14-201414022014-sometext。目录名称不能包含点,所以我不想匹配14022014-sometext.more。就像你所看到的,我只想匹配%b%d-%Y%d%m%Y-textofanylengthWithoutDots之后的目录。正则表达式匹配两个日期时间格式

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

回答

0

我假设每个目录列表是由新线分离

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

将匹配这两种情况下,将匹配的文本,只有当它是不间断的(由点或任何其他为此事),直到它击中行结束。

一些注意事项:

  • 如果你想匹配点,除了你的一切可以用[^.]+代替最终\w+
  • 您需要使用多行修饰符/m才能正常工作,否则$将仅匹配字符串的末尾。
  • 我没有添加^的正则表达式的开始,但你可以这样做,如果每一行包含一个目录
  • 当然,你可以扩展这个正则表达式包括(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)而不是[A-Z]\w{2}。我没有这样做,以保持它的可读性。我也建议你将它存储在一个python数组中,并为了维护而将它动态地插入到你的正则表达式中。

看到它在行动:http://regex101.com/r/pS6iY9

+0

感谢。还有一件事:如果我想匹配'Feb14-2014_xyz'呢?所以2014年之后的任何\ + w(如第二种情况)。我怎样才能做到这一点?我试过了([A-Z] \ w {2} \ d {1,2} \ - \ d {4} \ w + | \ d {7,8} \ - \ w +)$'编辑:我想通了。这是行得通的:'([AZ] \ w {2} \ d {1,2} \ - \ d {4} \ w + | [AZ] \ w {2} \ d {1,2} \ - \ d {4} | \ d {7,8} \ - \ w +)$' – Cecil

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+)匹配 - 第二类。