分割长度和字符不同的字符串

时间:2019-03-15 10:25:03

标签: vba

作为较大代码的一部分,我试图拆分文件名字符串,以便可以使用基数在一组文件夹中搜索文件。

典型的文件名是:

TEST-999-TY-MOD-DOC-000999-SOME RANDOM FILE NAME.xls
TEST-999-TY-MOD-DOC-000998_SOME RANDOM FILE NAME.xls
TEST-999-TY-MOD-DOC-000997 SOME RANDOM FILE NAME.xls

TEST-999-TYP-MOD-DOC-000999-SOME RANDOM FILE NAME.xls
TEST-999-TYP-MOD-DOC-000998_SOME RANDOM FILE NAME.xls
TEST-999-TYP-MOD-DOC-000997 SOME RANDOM FILE NAME.xls

这些文件名中唯一不变的是第六部分的6位格式 有没有一种方法可以在所有这些文件名上使用split函数,使其仅具有基础名称

TEST-999-TY-MOD-DOC-000999

如果它们的长度都相同,那么我可以使用left函数,但是因为它改变了,而且它们与我在奋斗的文件名中使用的内容不一致。

欢呼

2 个答案:

答案 0 :(得分:3)

我们可以尝试使用以下模式进行正则表达式替换:

^(.*-\d{6}).*$

然后,我们可以替换为第一个(也是唯一一个)捕获组,从而删除结尾的文件名。

Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")

RE.ignoreCase = True
RE.Global = True

RE.Pattern = "^(.*-\d{6}).*$"
Debug.Print RE.Replace("TEST-999-TY-MOD-DOC-000999-SOME RANDOM FILE NAME.xls", "$1")

这是一个演示正则表达式工作正常的演示:

Demo

答案 1 :(得分:0)

左Excel公式

如果基本名称末尾的数字序列始终以0开头并且包含6个字符(数字),则可以使用:

=IF(A1="","",LEFT(A1,FIND("0",A1)+5))
相关问题