我如何得到最后四个和第一个角色?

时间:2013-04-07 11:48:21

标签: vbscript

我想用这个代码来比较两个字符串。这个想法是得到一个单词的第一个字母和一个数字的最后四个并将它放在一起,以便我可以将它与另一个进行比较。例如,如果我有“史密斯约翰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

到目前为止,这就是我所拥有的,但我无法使其发挥作用。有人可以帮帮我吗?

3 个答案:

答案 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