Python中有没有类似Lua的string.sub的函数?
根据标题,我在找一个和Lua的string.sub功能相似的Python函数,不管是第三方库的还是Python标准库里的。我在网上(包括StackOverflow)搜索了快一个小时,但什么都没找到。
3 个回答
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)
你可以在 这里 找到一些相关信息。
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其实不需要这样的函数。它的切片语法直接支持字符串的子串功能(还有更多其他功能):
>>> 'hello'[:2]
'he'
>>> 'hello'[-2:]
'lo'
>>> 'abcdefghijklmnop'[::2]
'acegikmo'
>>> 'abcdefghijklmnop'[1::2]
'bdfhjlnp'
>>> 'Reverse this!'[::-1]
'!siht esreveR'