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)
我有一个网络驱动器上的所有文件的提取物,并且在一些文件名中是一个部件号,部件号格式是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)