【问题标题】:Is there a Python function like Lua's string.sub?有没有像 Lua 的 string.sub 这样的 Python 函数?
【发布时间】:2011-12-02 03:38:31
【问题描述】:

根据标题,我正在寻找一个类似于 Lua 的 string.sub 的 Python 函数,无论是第 3 方还是 Python 标准库的一部分。我已经在整个互联网(包括 stackoverflow)上搜索了将近一个小时,但还是找不到任何东西。

【问题讨论】:

  • string.sub 在 Lua 中做了什么?
  • 你试过了吗:tinyurl.com/dyes5s
  • @JohnKeyes: string.sub 返回一个从另一个字符串中截取的字符串,例如:str = "Hello, World!" print(string.sub(str,1,5)) 会输出:Hello

标签: python string substring


【解决方案1】:

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'

与 Lua 不同,Python 是零索引,因此字符计数不同。数组开始 from 1 in Lua, Python 中的 0。

在 Python 切片中,第一个值是包含的,第二个值是排除的(最多但不包含)。空的第一个值等于零,空的第二个值等于字符串的大小。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢。 :) 顺便说一句,我只是在这里的解释器中玩它.. 'hello'[0:4] 只给我'地狱',但如果字符串从 0 开始,那么 4 将是最后一个字符?
    • @Erkling:切片包含第一个参数,但不包含第二个参数。 a[0:4] 为您提供元素 0 到 3。
    • 函数调用中的等价物,如果你需要它们,是:'hello'.__getitem__(slice(1,None)) 或 import operator; getitem('hello', slice(1,None))
    【解决方案3】:

    是的,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多