我有很多数据包含我希望从格式非常不一致的单元格中提取的数字(从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
谢谢。
答案 0 :(得分:2)
如果您不能依赖任何静态元素,而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