VBS 正则表达式从字符串中获取下划线

VBS Regex getting the underscore from a string

我有一个简单的结果来检测文件名的一部分。我的文件有它们的通用名称 (FILENAME)、第二个名称 (SECONDNAME#) 和最终标记,所有链接都用下划线表示。

我在第二个名字后面,可以有少量的值。第三部分,最后一个标签,可以是高度可变的并且不被检查。

FILENAME_SECONDNAME1_DS.txt

FILENAME_SECONDNAME2_DS.txt

FILENAME_SECONDNAME3_ER.txt

检测第二个名字后的尾随下划线很重要,有助于表明我有第二个名字,并且不会意外检测到文件名中的相似字符串部分。

我检查以下内容

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 的正则表达式匹配我的模式,但 match.Value 从来没有下划线。我只能假设我没有将下划线与我的模式相匹配。如何在我的比赛中包含下划线?

管道在整个过程中起作用,因此对于您当前的正则表达式,3 个可能的替代方案是 SECONDNAME1SECONDNAME2SECONDNAME3_

也就是说,在这种情况下您甚至不需要管道运算符。

改为执行以下操作:

SECONDNAME[1-3]_

只需匹配 SECONDNAME 后跟 1、2 或 3,然后再跟一个下划线。

Demo

您可以将您的模式构建到组中,以便在之后轻松访问它们:

Demo here ^(\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