Python中如何获取一个字符串的子串?

2649

我想从字符串的第三个字符开始获取一个新的字符串,直到末尾,例如myString[2:end]。如果省略第二部分表示“到末尾”,那么如果省略第一部分,它是否从开头开始?


3
这个链接包含了一个清晰的解释,介绍如何在Python中切割字符串。 - mario ruiz
16个回答

10

我有一个情况需要将一段PHP脚本翻译成Python,其中有很多使用了substr(string, beginning, LENGTH)函数。
如果我选择Python的string[beginning:end],我就需要计算很多的结束索引,所以更简单的方法是使用string[beginning:][:length],这样可以省去很多麻烦。


10
str1='There you are'
>>> str1[:]
'There you are'

>>> str1[1:]
'here you are'

#To print alternate characters skipping one element in between

>>> str1[::2]
'Teeyuae'

#To print last element of last two elements
>>> str1[:-2:-1]
'e'

#Similarly
>>> str1[:-2:-1]
'e'


#Using slice datatype

>>> str1='There you are'
>>> s1=slice(2,6)
>>> str1[s1]
'ere '



2
我喜欢你列出选项的方式。不过,你的两个选项似乎是一样的? - LHM

6
也许我错过了,但是我在这个页面上没有找到对原始问题的完整答案,因为变量在这里没有进一步讨论。所以我不得不继续搜索。
由于我还没有被允许评论,让我在这里添加我的结论。当我访问这个页面时,我相信我不是唯一感兴趣的人:
 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

如果省略第一部分,您将得到:
 >>>myString[:end]
 'Hello' 

如果在冒号中间也留下了它,你将得到一个最简单的子字符串,它将是第5个字符(从0开始计数,所以在本例中是空格):

 >>>myString[end]
 ' '

4

使用硬编码的索引本身就很混乱。

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

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

如果我们想知道我剩下多少钱。
常规解决方案:
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

使用切片可以增强可读性。

5
也许这不是最好的例子,因为硬编码的索引仍然存在,可读性来自中间变量,而这些变量在第一个例子中也可以使用。 - ASalazar

1
a="Helloo"
print(a[:-1])

在上述代码中,[:-1] 表示从开头打印到最大限制 -1 。 输出:
>>> Hello

注意:这里的[:-1]与[0:-1]和[0:len(a)-1]相同。
a="I Am Siva"
print(a[2:])

OUTPUT:

>>> Am Siva

在上面的代码中,[2:] 表示从索引 2 到最后一个元素打印 a。
请记住,如果您将打印字符串的最大限制设置为 (x),则它将打印字符串直到 (x-1),并且要记住列表或字符串的索引始终从 0 开始。

0

我有一个更简单的解决方案,使用for循环在字符串中查找给定的子字符串。 假设我们有两个字符串变量,

main_string = "lullaby"
match_string = "ll"

如果您想检查给定的匹配字符串是否存在于主字符串中,可以这样做:
match_string_len = len(match_string)
for index,value in enumerate(main_string):
    sub_string = main_string[index:match_string_len+index]
    if sub_string == match_string:
       print("match string found in main string")

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