我有很多数据,其中包含数字(2 到 3 位数字),我希望从格式非常不一致的单元格中提取这些数字,示例如下:
SRK XXXX SCNO-200 3X2X
SRK XXXX SCNO 200 20X20X
SRK XXXX SCNO-25 20X2X
KOS YYYY SCNO 25 20X2X
所以我只需要 -200
、200
、-25
、25
等,我必须将它们放入单独的列中。
如果有人知道如何提供帮助。
我测试了以下字符串,并认为它可能用于正则表达式宏。
\s|\-|\d{1,3}\s
谢谢。
最佳答案
如果您不能依赖任何静态元素,并且 SCNO
只是任意文本,并且您所知道的是您需要的数字只是一个独立的 2 或 3 位数字序列以及可选的 -
在前面,您可以使用以下正则表达式:
-?\b\d{2,3}\b(?!\S)
请参阅regex demo
详细信息:
-?
- 可选的-
\b
- 字边界\d{2,3}
- 2 到 3 位数字\b
- 单词边界(?!\S)
- 负向前视,确保当前位置右侧必须有空格或字符串结尾。
查看示例 VBA 演示:
Sub ExtractSomeMatches()
Dim rx As RegExp
Dim m As MatchCollection
Dim n As Match
Dim s As String
s = "SRK XXXX SCNO-200 3X2X " & vbCrLf & "SRK XXXX SCNO 200 20X20X" & vbCrLf & "SRK XXXX SCNO-25 20X2X" & vbCrLf & "KOS YYYY SCNO 25 20X2X"
Set rx = New RegExp
With rx
.Global = True
.Pattern = "-?\b\d{2,3}\b(?!\S)"
End With
Set m = rx.Execute(s)
If m.Count > 0 Then
For Each n In m
Debug.Print n.Value
Next
End If
End Sub
关于regex - 如何从Excel单元格中提取特定字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013099/