regex - 如何从Excel单元格中提取特定字符串?

标签 regex 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

谢谢。

最佳答案

如果您不能依赖任何静态元素,并且 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

关于regex - 如何从Excel单元格中提取特定字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013099/

相关文章:

java - 正则表达式拆分字符串(在 Java 中)以便保留空格?

vba - 防止用户停止宏(Excel VBA)

excel - Excel 中的 Cell_Changing 事件

arrays - 在两个数组中查找不匹配项并将不匹配项添加到列中的最后一个位置

excel - 以编程方式将最小值/最大值添加到 Excel 右下角的状态栏

java - 将正则表达式与 Kotlin 结合使用

regex - 正则表达式替换原始字符串的保留部分

java - 正则表达式匹配一个或两个点

r - 从R运行VBA脚本

vba - 使用 Excel VBA 展开和折叠行