我在python中工作。我的问题是我有几个字符串,我必须检测它们的哪一部分看起来像路径,然后规范化那些是实际路径。
例如
我有几个不同的字符串如下:
1。 .. \ .. \ .. \工作区
2。 C:\源\工作区
3。 -B .. \ .. \源
4。 -build .. \ .. \工作\源.. \工作区
5。 -HD:\ ABC \ BDS \工作区
基本上一些字符串是直接路径,有些字符串有尾随 - 附在它们上面。选项字符串的长度是可变的。
在上面的例子中,字符串3,4,5包含一个预先附加了选项-B,-build,-H的路径字符串。
问题是如何从上面的例子中检测出字符串的哪一部分是路径而哪部分不是。选项没有修复,所以我不能只检查给定字符串的头部预先指定的选项。
前进的唯一方法是从...开始或从前一个字符开始的子字符串:(例如C:或D :)。
所以问题是有没有任何通用的方法来做这个或者python是否提供任何函数来从任何特定位置开始截取字符串的截断部分?
满足上述5个例子的任何答案都很酷,即使它有点过度拟合。
我目前使用的代码,例如2和5是:path = path[path.find(':')-1:]
而对于其他人path = path[path.find('.'):]
。但这不是一般化和不冷静的。所以我正在寻找更好的算法或解决方案。
答案 0 :(得分:0)
如果您没有已知的选项列表,我认为您不能拥有100%可靠的算法。
如果我们采取一些合理的猜测,我可以想到这样的事情:
有些情况会发生故障:
答案 1 :(得分:0)
是的,我认为你需要的工具是列表切片机制
我们初始化一个字符串:
string = "a/b/c/d"
如果我们想要访问例如第一个两个元素,那么我们会这样做:
sub_string = string[:2]
如果我们想要访问最后两个元素,那么我们将使用:
sub_string = string[-2:]
更多关于列表切片http://www.pythoncentral.io/how-to-slice-listsarrays-and-tuples-in-python/
希望有所帮助:)
答案 2 :(得分:0)
使用我创建的这个功能:
import os
string_1 = 'adsflk;ajewqpfoiewjqfpowijapfeiojC:\Python27'
def parse_path(string):
count = 0
while True:
count += 1
new_string = string.split(string[:count], 1)
if os.path.exists(new_string[1]):
return new_string
break
使用parse_path
运行string_1
函数会返回'C:\Python27'
。只需发送任何这些字符串的功能,它应该工作。祝好运!在评论中提问。
答案 3 :(得分:0)
这样的事情可以吗?
import os
possibles = [
"..\..\..\Workspace",
"C:\source\Workspace",
"-B..\..\source",
"-build..\..\work\source..\workspace",
"-HD:\abc\bds\Workspace "
]
paths = []
for p in possibles:
if p[0] == '-':
if ':' in p:
p = p[p.index(':')-1:]
else:
cut = 2
while not os.path.exists(p) and p:
p = p[cut:]
cut+=1
if p: paths.append(p)