Regex VBA正则表达式从字符串中提取数据

Regex VBA正则表达式从字符串中提取数据,regex,vba,Regex,Vba,我对RegEx还不熟悉,我似乎不明白为什么它不起作用。我让它工作,但丢失了数据。我已经尝试过各种各样的变化,我不记得我做了什么让这个工作之前 我有以下变量的字段 “SB123” “某些数据SB 1234” “一些数据SB 1234567和更多数据” “SB1234.”等 我想提取的是SB和number部分。有人能帮忙吗 Sub ExtractSBData() Dim regEx Dim i As Long Dim pattern As String Set regEx = CreateObje

我对RegEx还不熟悉,我似乎不明白为什么它不起作用。我让它工作,但丢失了数据。我已经尝试过各种各样的变化,我不记得我做了什么让这个工作之前

我有以下变量的字段

SB123
某些数据SB 1234
一些数据SB 1234567和更多数据”
SB1234.”等

我想提取的是SB和number部分。有人能帮忙吗

Sub ExtractSBData()

Dim regEx
Dim i As Long
Dim pattern As String
Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Global = True
regEx.pattern = ".*(SB\s*\d{3}\d+).*"

    For i = 2 To ActiveSheet.UsedRange.Rows.Count
        If (regEx.test(Cells(i, 14).value)) Then
            Cells(i, 16).value = regEx.Replace(Cells(i, 14).value, "$1")
        End If
    Next i

End Sub

对不起,我意识到我没有解释它现在在做什么。目前,只有分组被数据包围(即“这里的数据SB123和这里的数据”而不是“这里的数据SB123”或“这里的数据SB123”)时,它才起作用。此外,它将整行放在单元格(i,16)中,而不仅仅是SB编号部分。

您可能只想试试
SB\s*\d{3,}

如果这不起作用(因为您要查找的文本之前或之后的数据),请记住正则表达式中的
运算符匹配除
\n
(换行符)之外的所有字符。然后您可以尝试
[。\n]*SB\s*\d{3,}[。\n]*


让我知道其中一个是否对你有用。

好吧,第二个不起作用,但如果我这样修改它,第一个就起作用了。*(SB\s*\d{3,})。*但我不知道这与我的有什么不同,为什么它起作用了???我直接使用了第一个,但它所做的只是用$1替换了我想要的文本,所以我添加了()但是后来它设置了整行的值,所以我在外部添加了。*。啊,好吧,这是有道理的。第一个不起作用的原因(我想)如下:
\d{3}\d+
。我认为该部分的匹配可能不明确??至少在
\d{3,}
,您的意思是您必须至少匹配3位数字。实际上,我刚刚在我的正则表达式测试仪中测试了
\d{3}\d+
,实际上,它不匹配。对于Visual Studio 2010/2012,您应该安装扩展--这是一个很棒的工具!