我想用这个代码来比较两个字符串。这个想法是得到一个单词的第一个字母和一个数字的最后四个并将它放在一起,以便我可以将它与另一个进行比较。例如,如果我有“史密斯约翰123456”并且我想输入“s3456”我应该能够找到它。
Dim strFileName, strTxtValue
strFileName = "4ABCD_Delta_Jhon_T_JR_123456"
strTxtValue = "D3456"
Dim item, items, firstInitial, lastFour, myArray
strFileName = replace(strFileName,"_"," ")
myArray = Split(strFileName)
For Each item In myArray
If IsNumeric(item) Then
lastFour = Right(item, Len(item)-2)
Exit For
End If
Next
For Each items In myArray
firstInitial = Left(items, 1)&lastFour
If UCase(strTxtValue) = UCase(firstInitial) Then
Contains = True
End If
Next
到目前为止,这就是我所拥有的,但我无法使其发挥作用。有人可以帮帮我吗?
答案 0 :(得分:2)
鉴于您的第一个例子,获取第一个字母和后四个数字很简单:
>> s = "Smith John 123456"
>> t = LCase(Left(s, 1)) & Right(s, 4)
>> WScript.Echo t, CStr(t = "s3456")
>>
s3456 True
如果您的输入更加多样化,例如文件名如“4ABCD_Delta_Jhon_T_JR_123456”, 然后使用RegExp或创造性地使用Split可能是必要的。让我们从:
开始>> s = "4ABCD_Delta_Jhon_T_JR_123456"
>> s = Split(s, "_", 2)(1)
>> t = LCase(Left(s, 1)) & Right(s, 4)
>> WScript.Echo t, CStr(t = "d3456")
>>
d3456 True
>>
这显然取决于名称是输入的第二个块。
如果您提供一些更有代表性的输入样本,我愿意考虑一个RegExp解决方案。
答案 1 :(得分:1)
另一种选择是使用正则表达式:
s = "Smith John 123456"
Set re = New RegExp
re.Pattern = "^(.).*(.{4})$"
WScript.Echo LCase(re.Replace(s, "$1$2"))
和第二个例子是这样的:
s = "4ABCD_Delta_Jhon_T_JR_123456"
Set re = New RegExp
re.Pattern = "^(?:\w*?[0-9]\w*?_)?([a-z])[a-z]*_.*(.{4})$"
re.IgnoreCase = True
WScript.Echo LCase(re.Replace(s, "$1$2"))
答案 2 :(得分:1)
另一种选择:
strFileName = "4ABCD_Delta_Jhon_T_JR_123456"
strTxtValue = "D3456"
strFromName = ""
myArray = Split(strFileName, "_")
For i = 0 To UBound(myArray)
firstChar = Asc(myArray(i))
'if not a number...
If firstChar < 48 Or firstChar > 57 Then
strFromName = Chr(firstChar)
Exit For
End If
Next
strFromName = strFromName & Right(strFileName, 4)
WScript.Echo strFromName, CStr(strFromName = strTxtValue)
'>> D3456 True