有没有办法在Python中对string进行子串处理?

有没有办法在Python中对string进行子串处理,以便从第三个字符到string的末尾得到一个新的string?

也许像myString[2:end]

如果离开第二部分意味着'直到结束',如果离开第一部分,是否从头开始?

 >>> x = "Hello World!" >>> x[2:] 'llo World!' >>> x[:2] 'He' >>> x[:-2] 'Hello Worl' >>> x[-2:] 'd!' >>> x[2:-2] 'llo Worl' 

Python把这个概念称为“切片”,它不仅仅是string。 看看这里全面介绍。

只是为了完整,没有人提到过它。 数组切片的第三个参数是一个步骤。 所以颠倒一个string就像下面这样简单:

 some_string[::-1] 

或者select替代字符将是:

 "Hello- -World"[::2] # outputs "Hello World" 

在string中前后移动的能力与从开始或结束开始排列切片保持一致。

Substr()通常(即PHP,Perl)这样工作:

 s = Substr(s, beginning, LENGTH) 

所以参数开始和长度

但Python的行为是不同的,它期待END(!)开始和结束。 初学者很难发现这一点。 所以正确的替代Substr(s,开始,LENGTH)是

 s = s[ beginning : beginning + LENGTH] 

一个常见的方法是通过string切片。 MyString[a:b]给你一个从索引a到(b-1)的子串,

一个例子似乎缺less这里:完整(浅)的副本。

 >>> x = "Hello World!" >>> x 'Hello World!' >>> x[:] 'Hello World!' >>> x==x[:] True >>> 

这是创build序列types副本(而不是internedstring)的常见习惯用法。 [:]浅拷贝一个列表,请参阅python-list-slice-used-for-no-obvious-reason 。

除了“结束”以外,你已经知道了。 它被称为切片符号。 你的例子应该阅读。

 new_sub_string = myString[2:] 

如果你忽略了第二个参数,它隐含地是string的结尾。

有没有办法在Python中对string进行子串处理,以便从第三个字符到string的末尾得到一个新的string?

也许像myString[2:end]

是的,如果您将名称, end ,分配或绑定到常量singleton,则实际上可以工作: None

 >>> end = None >>> myString = '1234567890' >>> myString[2:end] '34567890' 

切片符号有三个重要参数:

  • 开始
  • 停止

没有给出的默认值是None – 但是我们可以明确地传递它们:

 >>> stop = step = None >>> start = 2 >>> myString[start:stop:step] '34567890' 

如果离开第二部分意味着'直到结束',如果离开第一部分,是否从头开始?

是的,例如:

 >>> start = None >>> stop = 2 >>> myString[start:stop:step] '12' 

请注意,我们在切片中包含了开始,但是我们只是去了,不包括停止。

如果step为None ,则缺省情况下,该步骤使用1 。 如果你使用负整数,Python足够聪明,可以从头到尾。

 >>> myString[::-1] '0987654321' 

我在解释切片符号问题的答案中详细解释切片符号。

我想在讨论中加两点:

  1. 您可以在空白处使用None来指定“从开始”或“结束”:

     'abcde'[2:None] == 'abcde'[2:] == 'cde' 

    这在函数中特别有用,你不能提供一个空的空间作为参数:

     def substring(s, start, end): """Remove `start` characters from the beginning and `end` characters from the end of string `s`. Examples -------- >>> substring('abcde', 0, 3) 'abc' >>> substring('abcde', 1, None) 'bcde' """ return s[start:end] 
  2. Python有切片对象:

     idx = slice(2, None) 'abcde'[idx] == 'abcde'[2:] == 'cde' 

也许我错过了,但是我在这个页面上找不到原始问题的完整答案,因为这里没有进一步讨论variables。 所以我不得不继续寻找。

由于我还没有被允许发表评论,所以让我在这里加上我的结论。 我确定在访问此页面时,我不是唯一对此感兴趣的人:

  >>>myString = 'Hello World' >>>end = 5 >>>myString[2:end] 'llo' 

如果你离开第一部分,你会得到

  >>>myString[:end] 'Hello' 

如果你离开了:在中间,你得到最简单的子string,这将是第5个字符(从0开始计数,所以在这种情况下是空白的):

  >>>myString[end] ' ' 

没有人提到使用硬编码索引本身可以是一团糟。

为了避免这种情况,python提供了一个内置的对象slice()

 string = "my company has 1000$ on profit, but I lost 500$ gambling." 

如果我们想知道我剩下多less钱

正常解决scheme

 final = int(string[15:19]) - int(string[43:46]) print(final) >>>500 

使用切片:

 EARNINGS = slice(15,19) LOSSES = slice(43,46) final = int(string[EARNINGS]) - int(string[LOSSES]) print(final) >>>500 

你可以注意到使用切片你获得可读性

我相信这是你要找的。

 >>> s = 'Python' >>> s = s[2:] >>> print(s) >>> 'thon' 

当你想索引2(包括2)后的所有东西,你只是使用:而没有别的。 希望有所帮助!