String 替换字符串vb6中除数字以外的所有内容

String 替换字符串vb6中除数字以外的所有内容,string,vb6,replace,String,Vb6,Replace,我做了研究,看到了很多关于这方面的帖子,但在VB6中找不到解决方案 那么如何在VB6中执行此操作 假设我得到一个字符串,如: “从前有一个小孩,他想离家1000英里以外的地方走一走……” 我只想在这个字符串中获得与字符串分离的数字“1000”,并想替换整个字符串,但数字应该静止不动。最简单的方法是遍历字符串并将数字复制到新的字符串: Function GetNumbers(Value As String) As String Dim Index As Long Dim Final As Stri

我做了研究,看到了很多关于这方面的帖子,但在VB6中找不到解决方案 那么如何在VB6中执行此操作

假设我得到一个字符串,如:

“从前有一个小孩,他想离家1000英里以外的地方走一走……”


我只想在这个字符串中获得与字符串分离的数字“
1000
”,并想替换整个字符串,但数字应该静止不动。

最简单的方法是遍历字符串并将数字复制到新的字符串:

Function GetNumbers(Value As String) As String
Dim Index As Long
Dim Final As String

  For Index = 1 To Len(Value)
    If Mid(Value, Index, 1) Like "[0-9]" Then
      Final = Final & Mid(Value, Index, 1)
    End If
  Next

  GetNumbers = Final
End Function
结果是:

?GetNumbers("abc12def345")
12345

当有很多数字时,使用长字符串效率很低。

基于Deanna的答案:

Function GetNumbers(Value As String) As String
Dim Index As Long
Dim Digit As String
Dim Final As String
Dim Count As Long

  Count = 1
  GetNumbers = Space(Len(Value))
  For Index = 1 To Len(Value)
    Digit = Mid(Value, Index, 1)
    If Digit Like "[0-9]" Then
      Mid(GetNumbers, Count, 1) = Digit
      Count = Count + 1
    End If
  Next

  GetNumbers = Left(GetNumbers, Count - 1)
End Function
此函数应为
O(n)


您可以使用正则表达式:

Dim NumExp As New RegExp

NumExp.Pattern = "\D"
NumExp.Global = True

strOutput = NumExp.Replace(strWhatToReplace, strReplaceWithWhat)

更高效的版本。我把它留给读者作为练习,因为我很懒:pA更好或更流行的解决方案@neosonne这是一种不同的语言,c#而不是VB6。没关系,这两种语言做的都一样,只是语法不同:
函数GetNumbers(val作为字符串)作为字符串返回CType(val.Where(Function(c)Char.IsDigit(c)).ToArray(),字符串)结束函数
@neosonne这不是有效的VB6语法。注意,是VB6,而不是VB.net。
Dim NumExp As New RegExp

NumExp.Pattern = "\D"
NumExp.Global = True

strOutput = NumExp.Replace(strWhatToReplace, strReplaceWithWhat)
nStr = "abc12def345"
For X = 1 To Len(nStr)
    If IsNumeric(Mid(nStr, X, 1)) = True Then
        nNum = nNum & Mid(nStr, X, 1)
    End If
Next X


MsgBox nNum