excel 公式在文件路径文本字符串中查找部件号

excel formula find part number in file path text string

我有一个网络驱动器上的所有文件的提取物,并且在一些文件名中是一个部件号,部件号格式是0000-000000-00。现在,在这个文件的 600,000 多个路径名中,我试图弄清楚如何从路径名中提取我的部件号。我认为 mid 公式可能有效,但我不知道如何告诉它找到任何带有 # 格式 0000-000000-00 的内容并从路径中仅提取这 14 个字符?

输入看起来像这样

c:\users\stuff\folder_name34-000001-01_ baskets_1.pdf
c:\users\stuff\folder_name34-000001-02_ baskets_2.pdf
c:\users\stuff\folder_name34-000001-03_ baskets_3.pdf
c:\users\stuff\folder_name34-000030-01_ tree_30.pdf
c:\users\stuff\folder_name\random text_1234-000030-02_ tree_30.pdf
c:\users\stuff\folder_name\more random stuff_1234-000030-02_ tree_30.pdf

输出我希望

1234-000001-01
1234-000001-02
1234-000001-03
1234-000030-01

既然你有一个我们可以利用的模式,使用这个:

=MID(A1,SEARCH("????-??????-??",A1),14)

找到模式的开始和 returns 之后的第 14 个字符。

您想要一个公式,但也可以使用 UDF 来应用正则表达式来获取模式(在这种情况下有点矫枉过正,但值得注意):

Option Explicit
Public Sub GetCustomString()
    Dim i As Long, tests()
    tests = Array("c:\users\stuff\folder_name34-000001-01_ baskets_1.pdf", _
    "c:\users\stuff\folder_name34-000001-02_ baskets_2.pdf", _
    "c:\users\stuff\folder_name34-000001-03_ baskets_3.pdf", _
    "c:\users\stuff\folder_name34-000030-01_ tree_30.pdf", _
    "c:\users\stuff\folder_name\random text_1234-000030-02_ tree_30.pdf", _
    "c:\users\stuff\folder_name\more random stuff_1234-000030-02_ tree_30.pdf")

    For i = LBound(tests) To UBound(tests)
        Debug.Print GetString(tests(i))
    Next
End Sub

Public Function GetString(ByVal inputString As String) As String
    Dim arr() As String, i As Long, matches As Object, re As Object
    Set re = CreateObject("VBScript.RegExp")
    With re
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = "\d{4}-\d{6}-\d{2}"
        If .test(inputString) Then
            GetString = .Execute(inputString)(0)
        Else
            GetString = vbNullString
        End If
    End With
End Function

在 sheet 中使用 UDF:


模式:\d{4}-\d{6}-\d{2}

解释:

\d{4} 匹配一个数字(等于[0-9])

{4} 量词 — 恰好匹配 4 次

"-" 匹配字符 - 字面意思(区分大小写)

\d{6} 匹配一个数字(等于[0-9])

{6} 量词 — 恰好匹配 6 次

"-" 匹配字符 - 字面意思(区分大小写)

\d{2} 匹配一个数字(等于[0-9])

{2} 量词 — 恰好匹配 2 次

全局模式标志: g 修饰符:全局。所有比赛(第一场比赛后不要 return) m 修饰符:多行。使 ^ 和 $ 匹配每行的 begin/end(不仅是字符串的 begin/end)