findstring中的第一个数字,可能是1,11,111
我使用这种模式name_name-number-name_name.txt
遍历文件名
我需要提取number
。
例如,
- 从
xxx_xx-111-ssadas22
我会得到111
。 - 从
xxx_xx-11-sadaesdwsq4443fsd2
我会得到11
目前使用这个,但是当名字中有一个数字的时候它就会缩短。 也尝试了一个正则expression式,但它不好。
Function FirstDigit(strData As String) As Integer Dim RE As Object Dim REMatches As Object Set RE = CreateObject("vbscript.regexp") With RE .Pattern = "(^|\\s)([0-100]+)($|\\s)" End With Set REMatches = RE.Execute(strData) FirstDigit = REMatches.item(0) End Function
任何想法 ?
尝试这个:
Function FirstDigit(strData As String) As Integer Dim RE As Object Dim REMatches As Object Set RE = CreateObject("vbscript.regexp") With RE .Pattern = "\b[^_\s]+_[^-\s]+-(\d+)-[^\.\s]+\.txt\b" End With Set REMatches = RE.Execute(strData) If REMatches.Count > 0 Then FirstDigit = REMatches(0).SubMatches(0) Else FirstDigit = -1 '' or whatever you want to output when there is no match End If End Function
testing:
Sub Test() Debug.Print FirstDigit("xxx_xx-1-ssadas22.txt") '' Returns 1 Debug.Print FirstDigit("xxx_xx-11-ssadas22.txt") '' Returns 11 Debug.Print FirstDigit("xxx_xx-111-ssadas22.txt") '' Returns 111 Debug.Print FirstDigit("xxx_xx-asasa-ssadas22.txt") '' Returns -1 (no match) End Sub
怎么样:
Function FirstDigit(strData As String) As Integer FirstDigit = 0 ary = Split(strData, "-") For i = LBound(ary) To UBound(ary) If IsNumeric(ary(i)) Then FirstDigit = CInt(ary(i)) Exit Function End If Next i End Function
如果string的模式保持不变,那么这对我很有用
Sub Sample() Debug.Print FirstDigit("xxx_xx-1-ssadas22") Debug.Print FirstDigit("xxx_xx-11-ssadas22") Debug.Print FirstDigit("xxx_xx-111-ssadas22") End Sub Function FirstDigit(strData As String) As Integer Dim RE As Object Dim REMatches As Object Set RE = CreateObject("vbscript.regexp") With RE .Pattern = "(\-([^-]+)\-)" End With Set REMatches = RE.Execute(strData) FirstDigit = Abs(Val(REMatches.Item(0))) End Function
这工作,并不需要您的文件名来适应任何特定的模式。 对于任何inputstring,它将返回第一个(整数)数字,即连续数字字符的第一个序列。
Function GetFirstNumber(s As String) As String Dim i As Long Dim strFirstNumber As String Dim thisChar As String Dim foundNumberStart As Boolean For i = 1 To Len(s) thisChar = Mid(s, i, 1) If thisChar Like "[0-9]" Then foundNumberStart = True strFirstNumber = strFirstNumber & thisChar ElseIf foundNumberStart Then Exit For 'Number finished. End If Next i GetFirstNumber = strFirstNumber End Function
用法示例:
?GetFirstNumber(" xxx_xx-111-ssadas22") 111 ?GetFirstNumber("xxx_xx-11-sadaesdwsq4443fsd2") 11 ?GetFirstNumber(" kjhsdfg WWWAAHHH!*666zombiesarecoming9827365498#%") 666