我需要获得\&之间所有内容的价值。 \ 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)
答案 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
[Debuggex演示](https://www.debuggex.com/r/rYms5zrhWCby_FdP