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 个可能的替代方案是 SECONDNAME1
、SECONDNAME2
和 SECONDNAME3_
。
也就是说,在这种情况下您甚至不需要管道运算符。
改为执行以下操作:
SECONDNAME[1-3]_
只需匹配 SECONDNAME
后跟 1、2 或 3,然后再跟一个下划线。
您可以将您的模式构建到组中,以便在之后轻松访问它们:
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
我有一个简单的结果来检测文件名的一部分。我的文件有它们的通用名称 (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 个可能的替代方案是 SECONDNAME1
、SECONDNAME2
和 SECONDNAME3_
。
也就是说,在这种情况下您甚至不需要管道运算符。
改为执行以下操作:
SECONDNAME[1-3]_
只需匹配 SECONDNAME
后跟 1、2 或 3,然后再跟一个下划线。
您可以将您的模式构建到组中,以便在之后轻松访问它们:
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