有没有类似于Lua的string.sub函数的Python函数?

5

如题,我正在寻找类似于Lua的string.sub函数的Python函数,无论它是第三方还是Python标准库的一部分。我已经在互联网上搜寻了近一个小时(包括stackoverflow),但完全没有找到任何内容。


2
string.sub 在 Lua 中是什么作用? - John Keyes
你试过这个链接吗:http://tinyurl.com/dyes5s? - Constantinius
@JohnKeyes: string.sub 函数返回一个从另一个字符串中截取的字符串,例如:str = "Hello, World!" print(string.sub(str, 1, 5))输出结果为: Hello - Erkling
3个回答

13

Lua:

> = string.sub("Hello Lua user", 7)      -- from character 7 until the end
Lua user
> = string.sub("Hello Lua user", 7, 9)   -- from character 7 until and including 9
Lua
> = string.sub("Hello Lua user", -8)     -- 8 from the end until the end
Lua user
> = string.sub("Hello Lua user", -8, 9)  -- 8 from the end until 9 from the start
Lua
> = string.sub("Hello Lua user", -8, -6) -- 8 from the end until 6 from the end
Lua

Python:

>>> "Hello Lua user"[6:]
'Lua user'
>>> "Hello Lua user"[6:9]
'Lua'
>>> "Hello Lua user"[-8:]
'Lua user'
>>> "Hello Lua user"[-8:9]
'Lua'
>>> "Hello Lua user"[-8:-5]
'Lua'

Python和Lua不同,Python是从0开始计数的,因此字符计数方式也不同。在Lua中数组起始值从1开始, 在Python中是0。
在Python中切片操作中,第一个值包含在内,第二个值不包含(取到但不包括)。如果第一个值为空,则等于0;如果第二个值为空,则等于字符串大小。

10

Python 不需要这样的函数。它的切片语法直接支持 String.sub 功能(以及更多):

>>> 'hello'[:2]
'he'
>>> 'hello'[-2:]
'lo'
>>> 'abcdefghijklmnop'[::2]
'acegikmo'
>>> 'abcdefghijklmnop'[1::2]
'bdfhjlnp'
>>> 'Reverse this!'[::-1]
'!siht esreveR'

顺便说一下,我只是在解释器中试玩而已... 'hello' [0:4] 只会给我 'hell',但是如果字符串从 0 开始的话,那么 4 就应该是最后一个字符了吧? - Erkling
1
@Erkling:切片在第一个参数上是包含的,但在第二个参数上是排除的。a[0:4]会给你元素0到3。 - Marcelo Cantos
如果您需要函数调用的等效方式,则为:'hello'.getitem(slice(1,None)) 或 import operator; getitem('hello', slice(1,None))。 - WaffleSouffle

5

是的,Python 提供了一个(在我看来非常好用的)子字符串选项:"string"[2:4] 返回 ri

请注意,这种“切片”支持多种选项:

"string"[2:] # "ring"
"string"[:4] # "stri"
"string"[:-1] # "strin" (everything but the last character)
"string"[:] # "string" (captures all)
"string"[0:6:2] # "srn" (take only every second character)
"string"[::-1] # "gnirts" (all with step -1 => backwards)

你可以在这里找到一些关于它的信息 here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接