如果数字(字符)> 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))))
如果数字(字符)> 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))))