假设我有一个字符串/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherthing
,我只想提取 '0-1-2-3-4-5' 部分。我试过这个:
str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
print str[str.find("-")-1:str.find("-")]
但是,结果只有 0。如何只提取 '0-1-2-3-4-5' 部分?
假设我有一个字符串/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherthing
,我只想提取 '0-1-2-3-4-5' 部分。我试过这个:
str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
print str[str.find("-")-1:str.find("-")]
但是,结果只有 0。如何只提取 '0-1-2-3-4-5' 部分?
使用 os.path.basename 和 rsplit:
>>> from os.path import basename
>>> name = '/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
>>> number, tail = basename(name).rsplit('-', 1)
>>> number
'0-1-2-3-4-5'
您快到了:
str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
print str[str.find("-")-1:str.rfind("-")]
rfind
会从头开始搜索。这假设路径中的其他任何地方都没有出现破折号。如果可以,请改为:
str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
str = os.path.basename(str)
print str[str.find("-")-1:str.rfind("-")]
basename
将获取文件名,不包括路径的其余部分。这可能就是你想要的。
编辑:
正如@bradley.ayers 所指出的那样,如果文件名没有在问题中准确描述,这就会崩溃。由于我们使用basename
,我们可以省略开始索引:
print str[:str.rfind("-")]
这会将“/Apath1/Bpath2/Cpath3/10-1-2-3-4-5-something.otherhing”解析为“10-1-2-3-4-5”。
这有效:
>>> str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
>>> str.split('/')[-1].rsplit('-', 1)[0]
'0-1-2-3-4-5'
假设您想要的只是最后一个“/”和最后一个“-”之间的内容。其他建议os.path
可能更有意义(只要操作系统对正确路径的外观没有混淆)
你可以使用re
:
>>> import re
>>> ss = '/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
>>> re.search(r'(?:\d-)+\d',ss).group(0)
'0-1-2-3-4-5'
虽然稍微复杂一些,但似乎与此类似的解决方案可能更健壮......