从文件名字符串vb.net

时间:2016-05-19 08:58:59

标签: vb.net string directory strip

我需要获得\&之间所有内容的价值。 \ PARTS

示例:

`XamoutOFdirectorys\THIS IS WHAT I WANT\PARTS`

resulting in the text,  THIS IS WHAT I WANT

in dir1\dir2\THIS IS WHAT I WANT\PARTS

I want the text THIS IS WHAT I WANT and not dir2\THIS IS WHAT I WANT

我怎样才能实现?

原因是我需要知道在PARTS目录之前找到的文件名是什么,无论在之前和之后找到多少个directorys ...

我最接近的是......

        Dim text As String = "fat\dir1\dir2\PARTS\bat"
    Dim str As String = text.Split("\"c, "\PARTS"c)(1)
    MsgBox(str)

3 个答案:

答案 0 :(得分:1)

尝试this

它应该返回一个数组,每个文本都在"\"之间。然后,您可以搜索文本"PARTS"并获取上一个索引。

Split -> [dir1, dir2, your text, PARTS]

index of PARTS = 3

index of your text = 2

我真的不知道vb.net但是我会用其他任何语言来做这件事。

答案 1 :(得分:1)

    Dim str As String = "fat\dir1\dir2\PARTS\bat"
    Dim dir As Match = Regex.Match(str, "\\([A-Za-z0-9\-]+)\\PARTS")
    MsgBox(dir.Groups(1).ToString)

答案 2 :(得分:0)

如果您的路径变量类型是String。你可以找到" \ PARTS"在路径中,获取路径中的起始索引A.然后找到最后一个" \"的另一个索引B.在A.使用子字符串函数在路径变量中的范围[B,A]之间得到你想要的东西:

Dim str As String = "fat\dir1\XamoutOFdirectorys\_THIS IS WHAT I WANT\PARTS\bat"
Dim beginIdx, endIdx As Integer
endIdx = str.LastIndexOf("\PARTS") - 1
beginIdx = str.LastIndexOf("\", endIdx - 1) + 1
Dim result = str.Substring(beginIdx, endIdx - beginIdx + 1)

顺便说一下,还有更优雅的方法,比如正则表达式。但我真的建议你应该阅读有关String的MSDN,弄脏你的手,自己解决问题。关于"分裂路径"还有许多解决方案。在Stack Overflow中,您可以在了解解决方案后更改它们。最好的问候。

正则表达式如下:

Dim str As String = "fat\dir1\XamoutOFdirectorys\_THIS IS REALLY WHAT YOU WANT.&%+\PARTS"
Dim dir As Match = Regex.Match(str, "\\([^\\]+)\\PARTS")
MsgBox(dir.Groups(1).ToString)

哪些可以在现实世界中工作并支持所有可能的路径版本(在Windows系统中测试)。

我正则表达式的状态机插图

\\([^\\]+)\\PARTS

Regular expression visualization

[Debuggex演示](https://www.debuggex.com/r/rYms5zrhWCby_FdP