Excel VBA从文件名中提取日期
我使用以下命令来获取文件名Excel VBA从文件名中提取日期,excel,string,vba,date,pattern-matching,Excel,String,Vba,Date,Pattern Matching,我使用以下命令来获取文件名 Dim wbName As String wbName = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)) 某些文件名可能如下所示: “17-18-08.07.17财年CM CC跟踪日志” “跟踪日志10-23-17” “跟踪日志17-18美国汽车俱乐部-8-7-17” 我试图找出如何使用正则表达式提取日期字符串、模式匹配 08.07.17
Dim wbName As String
wbName = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1))
某些文件名可能如下所示:
“17-18-08.07.17财年CM CC跟踪日志”“跟踪日志10-23-17”
“跟踪日志17-18美国汽车俱乐部-8-7-17” 我试图找出如何使用正则表达式提取日期字符串、模式匹配 08.07.17
10-23-17
8-7-17此正则表达式将捕获您提到的所有日期格式。确保它是一个
全局
:
(\d{1,2}[.,-]\d{1,2}[.,-]\d{1,2})
您可以尝试以下模式:
\b(1[0-2]|0?[1-9])[-./](3[01]|[1-2]\d|0?[1-9])[-./](\d{2}|\d{4})\b
这假设日期,如您在示例中所示
- 都是MDY格式
- M可以是1-12范围内的一位或两位数字条目,可选的前导
表示1到90
- D将在1-31范围内,1到9的可选前导为0
- Y将是两位数或四位数
[-./]
如果您需要,md和Y将在单独的捕获组中
如果这不能充分描述事情,你需要更具体一些。例如,可以很容易地进行修改,使所有分隔符都相同 我刚刚意识到你会有一个优先权问题,但是在你发布的示例中,似乎所有的日期都在文件名的末尾,所以只需使用
Right(filename,8)
函数,首先获取正确的子字符串,然后对其应用正则表达式。这样,答案肯定是准确的。很难将所有内容都包含在regexI用于我的模式中。谢谢