Python:检查字符串是否包含子字符串

检查字符串是否包含子字符串有助于概括条件并创建更灵活的代码。 此外,根据您的域模型 - 检查字符串是否包含子字符串也可以让您推断对象的字段(如果字符串本身对字段进行编码)。

在本指南中,我们将了解 如何检查字符串是否包含子字符串 在Python中。

in 操作者

检查 Python 字符串是否包含子字符串的最简单方法是使用 in 运营商。

in 运算符用于检查 Python 中数据结构的成员资格。 它返回一个布尔值(或者 True or False)。 在Python中检查字符串是否包含子字符串,使用 in 运算符,我们只需在超字符串上调用它:

fullstring = "StackAbuse"
substring = "tack"

if substring in fullstring:
    print("Found!")
else:
    print("Not found!")

该运算符是调用对象的简写 __contains__ 方法,也适用于检查列表中是否存在某个项目。 值得注意的是,它是 不是空安全的,所以如果我们的 fullstring 指着 None,会抛出异常:

TypeError: argument of type 'NoneType' is not iterable

为了避免这种情况,您首先要检查它是否指向 None 或不:

fullstring = None
substring = "tack"

if fullstring != None and substring in fullstring:
    print("Found!")
else:
    print("Not found!")

String.index() 付款方式

Python中的String类型有一个方法叫做 index() 可用于查找字符串中子字符串第一次出现的起始索引。

如果没有找到子字符串,则 ValueError 抛出异常,可以使用 try-except-else 块来处理:

fullstring = "StackAbuse"
substring = "tack"

try:
    fullstring.index(substring)
except ValueError:
    print("Not found!")
else:
    print("Found!")

如果您还需要知道子字符串的位置(而不是仅知道它在整个字符串中的存在情况),则此方法非常有用。 该方法本身返回索引:

print(fullstring.index(substring))

不过,为了检查字符串是否包含子字符串,这是一种冗长的方法。

String.find() 方法

String 类还有另一个方法,称为 find() 使用起来比 index(),主要是因为我们不需要担心处理任何异常。

If find() 找不到匹配项,则返回 -1,否则返回较大字符串中子字符串的最左边索引:

查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!

fullstring = "StackAbuse"
substring = "tack"

if fullstring.find(substring) != -1:
    print("Found!")
else:
    print("Not found!")

当然,它执行与以下相同的搜索 index() 并返回父字符串中子字符串开头的索引:

print(fullstring.find(substring))

正则表达式(RegEx)

正则表达式提供了一种更灵活(尽管更复杂)的方法来检查字符串的模式匹配。 使用正则表达式,您可以通过更大的搜索空间执行灵活且强大的搜索,而不是像以前那样进行简单的检查。

Python 附带了一个用于正则表达式的内置模块,称为 re。 该 re 模块包含一个名为的函数 search(),我们可以用它来匹配子字符串模式:

from re import search

fullstring = "StackAbuse"
substring = "tack"

if search(substring, fullstring):
    print "Found!"
else:
    print "Not found!"

如果您需要更复杂的匹配功能(例如不区分大小写的匹配),或者您正在处理大型搜索空间,则此方法是最佳选择。 否则,对于简单的子字符串匹配用例,应避免正则表达式的复杂性和较慢的速度。

关于作者

本文由 Jacob Stopak 撰写,他是一名软件顾问和开发人员,热衷于通过代码帮助他人改善生活。 雅各布是创造者 初始提交 – 一个致力于帮助好奇的开发人员了解他们喜欢的程序是如何编码的网站。 其特色项目帮助人们 学习 Git 在代码级别。

时间戳记:

更多来自 堆栈滥用