在最近的bash版本中,我可以这样做:
$ string="Universe.World.Country.State.City.Street"
$ echo $string
Universe.World.Country.State.City.Street
$ newString="${string##*.}"
$ echo $newString
Street
使用Python,这样做的简洁方法是什么? 我对最后一个时期之后的最后一个子字符串感兴趣。
谢谢!
答案 0 :(得分:3)
怎么样
x[x.rfind('.') + 1 : ]
对我来说,表达你感兴趣的东西(找到最后一个点,然后把它后面的所有内容)简单地表达为一个模式或“最长匹配”的概念。
答案 1 :(得分:3)
>>> 'Universe.World.Country.State.City.Street'.rpartition('.')[2]
'Street'
答案 2 :(得分:1)
>>> "Universe.World.Country.State.City.Street".rsplit('.',1)[1]
'Street'
编辑:SilentGhost建议的rpartition似乎是效率最高的
# rpartition
$ python -m timeit -r100 -n100 -s 'x="Universe.World.Country.State.City.Street"' 'x.rpartition(".")[-1]'
100 loops, best of 100: 0.749 usec per loop
# rfind
$ python -m timeit -r100 -n100 -s 'x="Universe.World.Country.State.City.Street"' 'x[x.rfind(".")+1:]'
100 loops, best of 100: 0.808 usec per loop
# rsplit
$ python -m timeit -r100 -n100 -s 'x="Universe.World.Country.State.City.Street"' 'x.rsplit(".",1)[1]'
100 loops, best of 100: 0.858 usec per loop
# split
$ python -m timeit -r100 -n100 -s 'x="Universe.World.Country.State.City.Street"' 'x.split(".")[-1]'
100 loops, best of 100: 1.26 usec per loop
# regex
$ python -m timeit -r100 -n100 -s 'import re;rex=re.compile(r"\.([^.]*)$");x="Universe.World.Country.State.City.Street"' 'rex.search(x).groups()[0]'
100 loops, best of 100: 3.16 usec per loop
答案 3 :(得分:0)
也许:
re.search(r"\.([^.]*)$", s).groups()[0]
编辑:第一个版本很糟糕:)
答案 4 :(得分:0)
如果你知道它永远是最后一个元素,那么你就无法击败
"Universe.World.Country.State.City.Street".split(".")[-1]
答案 5 :(得分:0)
string.rsplit('.', 1)[-1]
仅返回最右边的'。',因此它也只匹配一次。
看起来像string.rpartition('.')[-1]
PS:gnibbler实际上定时了rsplit,它比rpartition,rfind略慢。