Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA从文件名中提取日期_Excel_String_Vba_Date_Pattern Matching - Fatal编程技术网

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范围内的一位或两位数字条目,可选的前导
    0
    表示1到9
  • D将在1-31范围内,1到9的可选前导为0
  • Y将是两位数或四位数
分隔符将位于
[-./]

如果您需要,md和Y将在单独的捕获组中


如果这不能充分描述事情,你需要更具体一些。例如,可以很容易地进行修改,使所有分隔符都相同

我刚刚意识到你会有一个优先权问题,但是在你发布的示例中,似乎所有的日期都在文件名的末尾,所以只需使用
Right(filename,8)
函数,首先获取正确的子字符串,然后对其应用正则表达式。这样,答案肯定是准确的。很难将所有内容都包含在regexI用于我的模式中。谢谢