我已经开始从事一项新工作,事实证明,在一堆目录中有一大堆完全无组织,非标准化的文件名(手动太多了)。最初我的计划是使用一个简单的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”等。
非常感谢您的帮助。
答案 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)
答案 2 :(得分:1)
以下是一个VBA函数示例,可以满足您的所有需求:
False