Разделить строку, которая варьируется по длине и символам - PullRequest
1 голос
/ 15 марта 2019

Как часть большего кода, я пытаюсь разбить строку имени файла, чтобы я мог использовать базовый номер для поиска файла в наборе папок.

Типичные имена файлов:

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-значный формат в 6-м разделе. Можно ли использовать функцию разделения для всех этих имен файлов, чтобы иметь толькобазовое имя

TEST-999-TY-MOD-DOC-000999

Если бы они были все одинаковой длины, то я мог бы использовать левую функцию, но, поскольку она меняется, и они не соответствуют тому, что они используют далее по имени файла, я борюсь

ура

Ответы [ 2 ]

3 голосов
/ 15 марта 2019

Мы можем попробовать выполнить замену регулярного выражения следующим шаблоном:

^(.*-\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")

Вот демоверсия, показывающая, что регулярное выражение работает правильно:

Демо

0 голосов
/ 15 марта 2019

Левая формула Excel

Если числовая последовательность в конце базового имени всегда начинается с 0 и содержит 6 символов (цифр), вы можете использовать:

=IF(A1="","",LEFT(A1,FIND("0",A1)+5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...