从字符串中删除所有初始数字,直到达到非数字字符

Posted

技术标签:

【中文标题】从字符串中删除所有初始数字,直到达到非数字字符【英文标题】:Remove all initial numbers from string until non-numerical character is reached 【发布时间】:2017-01-13 14:52:58 【问题描述】:

我正在尝试删除字符串的第一个数字(删除所有数字,直到到达第一个非数字字符)。一些字符串的起始数字格式为"14 214",其中应为14214。这是分隔数字的特殊空间,如果A1中的字符串以14 214开头,那么

ISNUMBER(LEFT(A1,3)*1)=TRUE

也就是说空格不是问题,我只需要检查第一个非数字字符。

我想到了下面的VBA函数:

Function RemoveNumbers(Txt As String) As String

i = 1
Do While i < 9
    If (IsError(Left(Txt, i) * 1)) = "False" Then
    i = i + 1
Else
    RemoveNumbers = Right(Txt, Len(Txt) - i)
End If
Loop
End Function

但它返回#VALUE!

函数是否正确编写?你有什么建议吗?

谢谢

【问题讨论】:

我会调查Range.CharactersCHR() 【参考方案1】:

沿着字符串从左到右走,查看每个字符。 如果 char 是空格,则什么也不做,如果是数字,则将其替换为空格,否则返回删除前导空格的字符串:

Function RemoveNumbers(txt As String) As String
    Dim i As Long
    For i = 1 To Len(txt)
        Select Case Mid$(txt, i, 1)
            Case " ":
            Case "0" To "9": Mid$(txt, i, 1) = " "
            Case Else
                Exit For
        End Select
    Next
    RemoveNumbers = LTrim$(txt)
End Function

【讨论】:

【参考方案2】:

Alex K 的好解决方案。

我想补充一点,原始程序的基本问题是 iserror not 捕获数字转换错误 - 一旦发生,整个函数就会退出,你只会得到一个值错误,因为未设置 RemoveNumbers。此外,当您离开(txt,i)=“14”时,错误不会发生,但只有在您离开(txt,i)=“14 2”时才会发生在下一个字符上。为了让它工作,你必须做这样的事情

Function RemoveNumbers(Txt As String) As String

On Error GoTo Handler

i = 1

Do While i <= Len(Txt)
    firstNumber = Left(Txt, i) * 1
    i = i + 1
Loop

Handler: 
    RemoveNumbers = Right(Txt, Len(Txt) - i + 1)    
End Function

【讨论】:

以上是关于从字符串中删除所有初始数字,直到达到非数字字符的主要内容,如果未能解决你的问题,请参考以下文章

从Python中的字符串中删除所有非数字字符

快速从字符串中删除所有非数字字符

从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)

从字符串中删除非字母数字字符(包括 ß、Ê 等)

如何从 Python 的数据框列中的字符串中删除非字母数字字符?

从字符串 Typescript 中删除非英语 [重复]