日期编码文档的VBA正则表达式模式

时间:2017-04-18 11:15:35

标签: regex excel vba excel-vba date

我已经开始从事一项新工作,事实证明,在一堆目录中有一大堆完全无组织,非标准化的文件名(手动太多了)。最初我的计划是使用一个简单的VBA脚本来使用前13个字符的字符串比较,然后如果它们不匹配,则在前面放置一个具有理想日期格式的字符串(利用文档创建的日期),但是然后我注意到已经存在几种模式,通过做我原来的计划,我将来会创建另一个问题(在我的理想字符串后面有不正确的日期代码)。因此,经过研究,我意识到应该采用正则表达式模式。

我理想的起始格式是这样的: “yyyy.mm.dd - ”(即“2014.11.20 - ”我尝试创建我的第一个表达式以匹配此但到目前为止没有运气:

^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+

有人可以告诉我哪里出错了吗?我在线教程的搜索让我比起初时更加困惑。

那里的计划是匹配目录中的其他常见日期格式(下面),并用“理想”替换它们,任何有关识别它们的正则表达式模式的帮助都将非常感激。

“yymmdd” “yyyy mm dd - ” “yyyymmdd” “yyyymmdd - ”

我的计划是使用一个简单的IF vba函数,查找名称匹配的内容并执行必要的VBA字符串操作以创建正确的标准格式。

例如,如果文件的当前名称是“141003 xxxxxx”,则将替换为“2014.10.03 - xxxxx”等。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

在你的表达式中,你将四个数字组分成三个点。显然,日期只有三个数字组,有两个点。所以第一个日期模式的正则表达式是:

^[0-9]{4}\.[0-9]{2}\.[0-9]{2}

演示:https://regex101.com/r/vUigcj/1

请注意{4}{2}量词分别需要四位和两位数字,而不是+量词提供的更宽松的“一位或多位数”条件。 / p>

涵盖您列出的所有模式的更通用的正则表达式是

^(?:[0-9]{2})?[0-9]{2}[ .]?[0-9]{2}[ .]?[0-9]{2} (?:- )?

演示:https://regex101.com/r/vUigcj/2

说明:

  • ^ - 字符串锚的开始
  • (?: - 非捕获组开始
    • [0-9]{2} - 年份的前两位数字
  • ) - 非捕获组的结束
  • ? - 使此组可选(允许省略世纪数字)
  • [0-9]{2} - 一年的最后两位数字
  • [ .] - 空格或点日期分隔符
  • ? - 使此分隔符可选
  • [0-9]{2} - 月份的两位数
  • [ .]? - 另一个可选的日期分隔符
  • [0-9]{2} - 当天的两位数字
  • - 空格(字面意思)
  • (?:- )? - 可选地后跟短划线和空格

答案 1 :(得分:1)

yyyy.mm.dd的模式,例如2014.11.20:

(^[0-9]{4})(.)([0-9]{2})(.)([0-9]{2})

注意RegEx培训和测试的绝佳网站:RegEx101

答案 2 :(得分:1)

以下是一个VBA函数示例,可以满足您的所有需求:

False