簡體   English   中英

如何從字符串的開頭修剪最長的匹配(使用python)

[英]How to trim the longest match from beginning of a string (using python)

在最新的bash版本中,我可以這樣做:

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

使用Python,有什么簡潔的方法? 我對最后一段之后的最后一個子字符串感興趣。

謝謝!

怎么樣

x[x.rfind('.') + 1 : ]

對我而言,這比模式或“最長匹配”概念更簡單地表達了您感興趣的內容(找到最后一個圓點,然后將其后的所有內容都包含在內)。

>>> 'Universe.World.Country.State.City.Street'.rpartition('.')[2]
'Street'
>>> "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

也許:

re.search(r"\.([^.]*)$", s).groups()[0]

編輯:第一個版本很糟糕:)

如果您知道它永遠是最后一個元素和句號,那么您將無法戰勝

"Universe.World.Country.State.City.Street".split(".")[-1]

具有maxsplit = 1的string.rsplit('.', 1)[-1]僅返回最右邊的'。',因此也僅匹配一次。

看起來像是用string.rpartition('.')[-1]折騰

PS:狼人實際上是對rsplit計時,它比rpartition慢一點,rfind。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM