如何从excel中的单元格中提取特定字符串?

时间:2017-05-16 23:16:44

标签: regex vba excel-vba excel

我有很多数据包含我希望从格式非常不一致的单元格中提取的数字(从2到3位数字),这是示例:

SRK XXXX SCNO-200 3X2X
SRK XXXX SCNO 200 20X20X
SRK XXXX SCNO-25 20X2X
KOS YYYY SCNO 25 20X2X

所以我只需要-200200-2525等,我必须将它们放在一个单独的列中。

如果有人知道如何提供帮助。

我测试了以下字符串并认为它可能用于正则表达式宏。

\s|\-|\d{1,3}\s

谢谢。

1 个答案:

答案 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

enter image description here