如果不使用正则表达式或一些非常复杂的逻辑,就很难做到完美。
此代码将返回纯数字子字符串,但在您的示例中,它将返回“18”和“2008”。您显然可以尝试添加更多逻辑来禁止“18”(但允许“13”或“09”等,但就像我说的那样开始变得复杂。我很乐意提供帮助,但不知道具体是什么你想要的,我认为最好暂时由你来决定。
Const str$ = "$8995 Apr 18 2008 Honda Civic Hybrid $8995 (Orem) pic map cars & trucks - by owner"
Option Explicit
Sub FindNumericValues()
Dim var() As String
Dim numbers As Variant
var = Split(str, " ")
numbers = GetNumerics(var)
MsgBox Join(numbers, ",")
End Sub
Function GetNumerics(words() As String) As Variant
Dim tmp() As Variant
Dim i As Integer
Dim n As Integer
Dim word As Variant
Dim bNumeric As Boolean
For Each word In words
n = 0
bNumeric = True
Do While n < Len(word)
n = n + 1
If Not IsNumeric(Mid(word, n, 1)) Then
bNumeric = False
Exit Do
End If
Loop
If bNumeric Then
ReDim Preserve tmp(i)
tmp(i) = word
i = i + 1
End If
Next
GetNumerics = tmp
End Function