Python与许多其他编程语言一样,将字符串类型定义为一系列字符组合。可以是字母字符、数字字符和特殊字符等。但 Python 子字符串是什么?子字符串就是这个序列里面的元素组合。本文将向你介绍从字符串中提取子字符串的多种方法,并向你展示如何确定子字符串是否存在于目标字符串中。
在 Python 中对字符串进行切片
切片是Python中非常强大的功能,也很灵活。你可以通过多种方式在 Python 中使用字符串切片来获取你想要的子字符串。这是 Python 字符串的切片语法:
string[start:stop:step]
释义:
- string:目标字符串。
- start:子字符串的起始索引,留空则默认为 0(从头开始)
- stop:子字符串的结束索引,留空则默认为字符串长度(到字符串结尾)
- step:切片的步进值,留空则默认值为 1。
注意:通过切片获得的子字符串,包含start
的索引值,但是不包含stop
的索引值。
获取字符串的结尾部分
如果在切片字符串时只使用起始索引,它将返回字符串的其余部分。
例子:
string = 'All around the world'
# Start at index 4
substring = string[4:]
print(substring)
# Print "around the world", 起始索引包含index(4)位置的字符
获取字符串的开头部分
如果你不使用起始索引,只使用停止索引,你可以获得字符串的开头部分。
例子:
string = 'All around the world'
# Stop at index 3
substring = string[:3]
print(substring)
# Print "All", 停止索引不包含index(3)位置的字符
获取字符串的中间部分
同时设置起始索引和停止索引,你可以获得字符串的中间部分。
例子:
string = 'All around the world'
substring = string[4:10]
print(substring)
# print "around"
使用负索引对字符串进行切片
如果你不知道这个字符串的长度,你想获取最后一个字符改如何处理呢?方法一,是先获取字符串长度,然后取最后一个值:string[len(string) - 1]
方法二,是使用负索引:string[-1]
很明显,使用负索引要简单的多。其实并不是所有的编程语言都支持负索引,Python支持负索引,这将给我们的子字符串处理带来很多便利。负索引是从-1
开始的。
例子:
string = "The quick brown fox"
# 获取最后两个字符
substring1 = string[-2:]
print(substring1) # Prints "ox"
# 舍弃最后三个字符
substring2 = string[:-3]
print(substring2) # Print "The quick brown "
获取字符串中的一个字符
这个很简单,如果切片中没有:
字符,只包含数字,它将返回该索引处的字符。
例子:
string = '0123456789'
substring = string[4]
print(substring)
# print "4"
通过切片获取整个字符串的副本
子字符串也可以跟字符串是一样的,你完全可以通过切片操作获取跟目标字符串一样的子字符串序列。要注意的是,这个子字符串序列,是字符串的副本(新字符串),虽然他们的值相同,但是他们是两个独立的字符串。(其实,所有通过切片操作获取的子字符串都是新字符串)
例子:
string = "I love you"
substring = string[::]
print(substring) # "I love you"
# 修改子字符串并不会影响原始字符串
substring += ' too!'
print(string) # "I love you"
print(substring) # "I love you too!"
通过步长获取指定字符
步长的用法,新手可能会觉得困惑,这边多说两句。什么是步长?字面理解,就是每一步的长度。想象一下你在人行道上踩地板砖,下面有从A-I,9块地板砖。步长是1,你每一步的跨度是一个格子,此时 C 的下一块地板,是 D(从A开始,意味着每块地板都会被踩到)步长是2,你每一步的跨度变大了,每一步的跨度变成了两个格子。你在 C 格子上的下一步,会踩到 E 上面(从A开始,意味着只有 A,C,E,G和I会被踩到,其他的会被跳过)步长是3,4,5…以此类推
默认情况下,切片操作会计算每个字符,步长是1。如果我们将步长设为 2,
看个例子:
string = 'Hello World'
# 设置步长为 2
substring = string[::2]
print(substring) # "HloWrd"
通过切片进行字符串翻转
另一种使用 step 的方法,你可以使用它来反转字符串。只需要设置步长为负数,即可以实现从右往左切片,即可以实现字符串翻转。
例子:
string = 'my string'
# Use a negative step to reverse a string
string_reversed = string[::-1]
print(string_reversed) # "gnirts ym"
在 Python 中搜索字符串中的子字符串
你可能希望确定子字符串是否存在于另一个字符串中,你需要用到下面的运算符。
使用 in 运算符
如果字符串中存在子字符串,则 in 运算符将返回 True,否则返回 False。
这是一个例子:
# The string
string = 'Hello World, this is a string'
# substring
substring = 'this'
if substring in string:
print('Found the substring!')
else:
print('Could not find the substring.')
使用 index() 方法
Python String类有一个 index() 方法,如果在字符串中找到目标子字符串,它将返回子字符串的索引。当你需要知道子字符串的位置时,这很有用。以下是如何使用此方法的示例:
# The string
string = 'Hello World, this is a string'
# The substring we are looking for
substring = 'this'
print(string.index(substring)
# print:13, 13是字字符串的起始位置
注意:index()方法,如果没有查找到子字符串,会返回ValueError错误。
使用 find() 方法
Python String类的 find() 方法和index()方法类似,如果找到了目标子字符串也会返回子字符串的起始索引,但更方便的是,如果没有找到字符串,它不会抛出异常。相反,它返回 -1。因为字符串的索引从 0 开始。
下面是使用 find 方法确定字符串是否包含子字符串的方法:
# The string
string = 'Hello World, this is a string'
# The substring we are looking for
substring = 'this'
print(string.find(substring)
# print:13, 13是字字符串的起始位置
使用正则表达式 re.search()
正则表达式是Python中非常强大的一个模块,我们用正则表达式同样可以查找子字符串(有点杀鸡用牛刀的感觉)以下是如何在 Python 中使用正则表达式查找子字符串:
import re
# The string
string = 'Hello World, this is a string'
# The substring we are looking for
substring = 'this'
print(re.search(substring, string)
# print:<re.Match object; span=(13, 17), match='this'>
# span中的13和17分别代表着子字符串出现的起始位置和结束位置。
总结
从上面的示例中我们可以看到,在Python中我们想要切片提取子字符串或者搜索子字符串,都是非常方便的,这得益于Python强大的字符串方法。
如果你熟悉Python正则表达式的用法,那更是如虎添翼。如果你想学习更多Python 技能,口袋资源提供了大量适合初学者的 Python 课程以及更高级的课程,可以给你非常大的帮助。
如果本站的内容对你有帮助,可以点击这儿,不花一分钱捐赠本站