Python 子字符串的使用、切片搜索和位置查找

Python 子字符串的使用、切片搜索和位置查找

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)位置的字符

优质Python课程推荐

Python 子字符串的使用、切片搜索和位置查找

【Udemy高分课程 + 中英文双字幕】

2022 年完整的 Python 开发课程:从入门到精通

获取字符串的中间部分

同时设置起始索引和停止索引,你可以获得字符串的中间部分。

例子:

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…以此类推

Python字符串切片

默认情况下,切片操作会计算每个字符,步长是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课程推荐

Python 子字符串的使用、切片搜索和位置查找

【Udemy高分课程 + 中英文双字幕】

2022 年完整 Python 训练营,从菜鸟到大师

在 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是字字符串的起始位置

正则表达式是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 课程以及更高级的课程,可以给你非常大的帮助。

如果本站的内容对你有帮助,可以点击这儿,不花一分钱捐赠本站

(0)
疯狂的小黑的头像疯狂的小黑
上一篇 2022年7月8日 下午6:57
下一篇 2022年7月12日 下午6:06

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

微信