我正在进行目录监听,需要获取遵循该模式的所有目录名称:Feb14-2014
和14022014-sometext
。目录名称不得包含点,因此我不想匹配14022014-sometext.more
。就像你可以看到我想只匹配模式%b%d-%Y
和%d%m%Y-textofanylengthWithoutDots
之后的目录。
对于第一种情况,它应该是[a-zA-Z]{3}\d{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+)$
将匹配这两种情况并且仅在文本不间断时(通过点或其他任何内容)匹配文本,直到它到达行尾。
一些注意事项:
\w+
替换为[^.]+
。 /m
才能生效,否则$
将仅匹配字符串的结尾。^
,但如果每行包含一个目录,则可以这样做(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
而不是[A-Z]\w{2}
。我没有这样做是为了保持它的可读性。我还建议您将其存储在python数组中,并将其动态插入到正则表达式中以保持可维护性。查看实际操作:http://regex101.com/r/pS6iY9