繁体   English   中英

如何从字符串内部提取子字符串?

[英]How to extract a substring from inside a string?

假设我有一个字符串/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("-")]

rfindrfind搜索。 假设路径中其他任何地方都没有破折号。 如果可以,请执行以下操作:

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'

虽然稍微复杂一些,但似乎类似的解决方案可能会更健壮...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM