从字符串中提取Excel VBA文件名

从字符串中提取Excel VBA文件名,excel,vba,string,windows,extract,Excel,Vba,String,Windows,Extract,我想从字符串中提取文件名。字符串的长度和文件名的长度总是不同的。 必须用VBA完成 字符串: href ist gleich:“abc/db://test.pdf | 0 | 100”>Bsp.: 我希望: test.pdf 我不知道如何进行。 如果脚本可以从一个字符串中提取多个文件名也很好 Zb: 字符串: href ist gleich: "abc//db://test.t.pdf|0|100" "db://test1.pdf|0|100">Bsp. 我希望: test.t.pdf

我想从字符串中提取文件名。字符串的长度和文件名的长度总是不同的。 必须用VBA完成

字符串:

href ist gleich:“abc/db://test.pdf | 0 | 100”>Bsp.:

我希望: test.pdf

我不知道如何进行。 如果脚本可以从一个字符串中提取多个文件名也很好

Zb:

字符串:

href ist gleich: "abc//db://test.t.pdf|0|100" "db://test1.pdf|0|100">Bsp.
我希望:

test.t.pdf test1.pdf

试试这个,然后根据需要编辑它。至少它是为你的两个例子设计的

Dim sStringToFormat As String
Dim i As Integer
Dim vSplit As Variant
Dim colFileNames As Collection
Dim sFormattedString As String

Set colFileNames = New Collection

sStringToFormat = "href ist gleich: ""abc//db://test.t.pdf|0|100"" ""db://test1.pdf|0|100"">Bsp."

vSplit = Split(sStringToFormat, "/")

For i = LBound(vSplit) To UBound(vSplit)

    If InStr(vSplit(i), ".") > 0 Then
        sFormattedString = Split(vSplit(i), "|")(0)
        sFormattedString = Split(sFormattedString, "<")(0)
        sFormattedString = Split(sFormattedString, ">")(0)
        colFileNames.Add sFormattedString
    End If

Next i
Dim sStringToFormat As String
作为整数的Dim i
作为变体的Dim vSplit
将colFileNames设置为集合
将格式化字符串设置为字符串
Set colfilename=新集合
sStringToFormat=“href ist gleich:“abc//db://test.t.pdf | 0 | 100”“db://test1.pdf | 0 | 100”“>Bsp。”
vSplit=拆分(sStringToFormat,“/”)
对于i=LBound(vSplit)到UBound(vSplit)
如果InStr(vSplit(i),“)>0,则
sformatedstring=Split(vSplit(i),“|”)0
sformatedstring=Split(sformatedstring,“”)(0)
colFileNames.AddsFormattedString
如果结束
接下来我
子测试ExtractFileName()
Debug.Print extractFileName(“file://D:/ETVGI_556/Carconfigurator_file/carconf_D.pdf”,“/”)
Debug.Print extractFileName(“abc//db://test.t.pdf | 0 | 100”)
Debug.Print extractFileName(“db://test1.pdf | 0 | 100”)
端接头
函数extractFileName(initString作为字符串,可选delim作为字符串)作为字符串
将字符串变为字符串
necString=left(initString,InStr(initString,“.pdf”)+3)
necString=右(necString,Len(necString)-InStrRev(necString_
IIf(delim,delim,“/”)-IIf(delim,Len(delim)-1,0)
extractFileName=necString
端函数
唯一的条件是在文件名前面(始终)存在初始字符串中的
“//”
字符。当然,所有时间的文件扩展名都是
.pdf。
如果不是,则需要此扩展名,并且该功能可以轻松调整。。。
如果第二个(可选)参数是
“/”
,则函数返回全名;如果省略,则函数返回文件名(无路径)。

一个选项可以是使用一种模式,在该模式下,您可以匹配前面的
/
,并在组中捕获1+个单词字符
\w+
,然后是
.pdf

您的价值在捕获组1中

/(\w+\.pdf)

如果您想要比
\w
更广泛的匹配,可以使用字符类扩展您想要匹配的内容,或者使用
[^
匹配字符类中列出的字符以外的任何字符

在这种情况下,否定字符类
[^/\124;”
将与除
/
“或空白字符
\s

/([^/|"\s]+\.pdf)

查看另一个

名称是否始终具有//before和| after?您可以使用类似于db://([^ |“\s]+\.pdf)\的正则表达式,并从捕获组1中获取值。查看其他示例可能是:leich:“file://D:/ETVGI\u 556/Carconfigurator\u file/carconf\u D.pdf”>carconfiguration然后尝试
/([^/\s]+\.pdf)
(\w+\.pdf)
尝试在字符串中查找
.pdf
,然后在
.pdf`之前的字符串中查找一个
`我不认为他会同时测试两个字符串。我担心这只是他需求定义的一种不好的方式……他需要返回字符串中所有扩展名的文件名。不仅是第一个匹配,我的意思是你可能是r是的,但我无法理解他到底需要什么。我(只是)相信他需要从每个这样的字符串中提取路径。字符串,不是他所呈现的。但我可能也错了……我想,现在轮到澄清问题了。您可能在最后更改了变量名,而忘记更改
vSplit=Split(s,“/”)
vSplit=Split(sStringToFormat,“/”)
中。我认为最好编辑它并更正。。。
/([^/|"\s]+\.pdf)