如何从字符串的开头修剪最长的匹配(使用python)

时间:2009-10-21 19:31:44

标签: python string

在最近的bash版本中,我可以这样做:

$ string="Universe.World.Country.State.City.Street"
$ echo $string
Universe.World.Country.State.City.Street
$ newString="${string##*.}"
$ echo $newString
Street

使用Python,这样做的简洁方法是什么? 我对最后一个时期之后的最后一个子字符串感兴趣。

谢谢!

6 个答案:

答案 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)

maxsplit = 1的

string.rsplit('.', 1)[-1]仅返回最右边的'。',因此它也只匹配一次。

看起来像string.rpartition('.')[-1]

的折腾

PS:gnibbler实际上定时了rsplit,它比rpartition,rfind略慢。