如果数字(字符)> 8,则从字符串末尾删除数字

Remove numbers from end of string if count of numbers(characters) > 8

如果数字(字符)> 8,我需要从字符串末尾删除数字
我使用了以下函数,但它从字符串中删除了所有数字。
那么,如何修改此函数以添加条件 if count of numbers(characters) > 8
预先感谢任何有用的评论和答案。

Option Explicit
 
Function StripNumber(stdText As String)
  Dim str As String, i As Integer
 
    stdText = Trim(stdText)
 
    For i = 1 To Len(stdText)
        If Not IsNumeric(Mid(stdText, i, 1)) Then
            str = str & Mid(stdText, i, 1)
        End If
    Next i
        StripNumber = str ' * 1
End Function
 
Function Remove_Number(Text As String) As String
    With CreateObject("VBScript.RegExp")
      .Global = True
      .Pattern = "[0-9]"
      Remove_Number = .Replace(Text, "")
    End With
End Function

您可以使用

\d{8,}(?=\.\w+$)
\d{8,}(?=\.[^.]+$)

参见regex demo。如果必须至少有 9 个数字,请将 8 替换为 9。

详情:

  • \d{8,} - 八位或更多数字
  • (?=\.\w+$) - 紧随其后的是 . 和一个或多个字符,字符串结尾必须跟在
  • 之后
  • (?=\.[^.]+$) - 八位或更多数字必须紧跟 . 字符,然后是 . 字符以外的一个或多个字符,直到字符串结束。

如果您可以访问最新功能,则可以避免 VBA 全部:

B2中的公式:

=LET(X,TEXTBEFORE(A2,".",-1),Y,TEXTAFTER(A2,X),Z,TEXTAFTER(CONCAT(".",IFERROR(--MID(X,SEQUENCE(LEN(X)),1),".")),".",-1),IF(LEN(Z)>8,SUBSTITUTE(A2,Z&Y,Y),A2))

或者,如果这些数字中没有前导零:

=LET(X,TEXTBEFORE(A2,".",-1),Y,TEXTAFTER(A2,X),Z,MAX(IFERROR(--MID(X,SEQUENCE(LEN(X)),LEN(X)),"")),IF(LEN(Z)>8,SUBSTITUTE(A2,Z&Y,Y),A2))

或者;溢出数组:

B2中的公式:

=BYROW(A2:A6,LAMBDA(a,LET(X,TEXTBEFORE(a,".",-1),Y,TEXTAFTER(a,X),Z,TEXTAFTER(CONCAT(".",IFERROR(--MID(X,SEQUENCE(LEN(X)),1),".")),".",-1),IF(LEN(Z)>8,SUBSTITUTE(a,Z&Y,Y),a))))

或者:

=BYROW(A2:A6,LAMBDA(a,LET(X,TEXTBEFORE(a,".",-1),Y,TEXTAFTER(a,X),Z,MAX(IFERROR(--MID(X,SEQUENCE(LEN(X)),LEN(X)),"")),IF(LEN(Z)>8,SUBSTITUTE(a,Z&Y,Y),a))))