VBS Regex получает подчеркивание из строки - PullRequest
3 голосов
/ 07 мая 2020

У меня есть простой результат - определить часть имени файла. Мои файлы имеют общее имя (FILENAME), второе имя (SECONDNAME #) и последний тег, все ссылки отмечены подчеркиванием.

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

FILENAME_SECONDNAME1_DS.txt

FILENAME_SECONDNAME2_DS.txt

FILENAME_SECONDNAME3_ER.txt10

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

Я проверяю следующее

set RE = new RegExp
RE.Ignorecase = true

sCONST = "FILENAME_SECONDNAME1_DS.txt"

RE.pattern = "(SECONDNAME1)|(SECONDNAME2)|(SECONDNAME3)_"
if RE.test(sCONST) = true then
    set matches = RE.Execute(sCONST)
    for each match in matches
        MsgBox match.Value
    next
end if

Регулярное выражение VB соответствует моему шаблону, но соответствует. Значение никогда не имеет подчеркивания. Я могу только предположить, что я не сопоставляю подчеркивание с моим шаблоном. Как я могу включить подчеркивание в мои совпадения?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вы можете объединить свой шаблон в группы, чтобы легко получить к ним доступ после:

Демо здесь ^(\w+_)(\w+_)(.*)(\.txt)$

Set RE = new RegExp
RE.Ignorecase = True
RE.global = True
RE.MultiLine = True
RE.pattern = "^(\w+_)(\w+_)(.*)(\.txt)$"

sCONST = "FILENAME_SECONDNAME1_DS.txt" & vbCrlf &_
"FILENAME_SECONDNAME2_DS.txt" & vbCrlf &_
"FILENAME_SECONDNAME3_DS.txt" & vbCrlf &_
"FILENAME_SECONDNAME4_DS.txt" & vbCrlf &_
"FILENAME_SECONDNAME5_ER.txt" & vbCrlf &_
"FILENAME_SECONDNAME6_ER.txt"

If RE.test(sCONST) = True then
    Set matches = RE.Execute(sCONST)
    For Each match in matches
        MsgBox "The first group is : "& match.subMatches(0) & vbCrlf & _
        "The second group is : "& match.subMatches(1) & vbCrlf & _
        "The third group is : "& match.subMatches(2) & vbCrlf & _
        "The fourth group is : "& match.subMatches(3)
    Next
End if
1 голос
/ 07 мая 2020

Канал работает со всем этим, поэтому с вашим текущим регулярным выражением 3 возможных альтернативы: SECONDNAME1, SECONDNAME2 и SECONDNAME3_.

При этом вы даже не в этом случае нужен оператор конвейера.

Вместо этого выполните следующее:

SECONDNAME[1-3]_

Просто сопоставьте SECONDNAME, за которым следует 1, 2 или 3, что затем следует символ подчеркивания.

Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...