Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex VBS正则表达式从字符串中获取下划线_Regex_Vbscript - Fatal编程技术网

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

Regex VBS正则表达式从字符串中获取下划线,regex,vbscript,Regex,Vbscript,我有一个简单的结果来检测文件名的一部分。我的文件有它们的通用名称(文件名)、第二个名称(SECONDNAME#)和最后一个标记,所有链接都用下划线表示 我在第二个名字后面,它可以有少量的值。第三部分,即最后一个标记,可以是高度可变的,并且不会进行检查 文件名\u SECONDNAME1\u DS.txt 文件名\u SECONDNAME2\u DS.txt 文件名\u SECONDNAME3\u ER.txt 检测第二个名称后的尾随下划线非常重要,这有助于指示我有第二个名称,并且不会意外地在文件

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

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

文件名\u SECONDNAME1\u DS.txt

文件名\u SECONDNAME2\u DS.txt

文件名\u SECONDNAME3\u 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的RegExp与我的模式匹配,但match.Value从来没有下划线。我只能假设我没有将下划线与模式匹配。如何将下划线包含在匹配项中?

管道在整个过程中都起作用,因此对于当前的正则表达式,三种可能的替代方法是
SECONDNAME1
SECONDNAME2
SECONDNAME3

也就是说,在这种情况下,您甚至不需要管道操作员

请改为执行以下操作:

SECONDNAME[1-3]\uu

只需匹配
SECONDNAME
,后跟1、2或3,然后后跟下划线即可


您可以将模式构建到组中,以便在以下情况下轻松访问:

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