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