Python
基本資料型別
字符串
查找

python查找字符串中指定字符的位置: 最后一次出现, count, find() index(), re.search() re.findall()

在这篇文章中,我们收集了一些关于如何在Python中查找或搜索字符串的最常见的问题。

1. 使用find()函数寻找一个特定的字符串位置

在Python中用于查找字符串的最基本函数之一是find()函数。 这个函数在一个字符串中找到一个给定的字符串并返回其位置。 如果该字符串不存在,它将返回-1

s = "Hello, Python!"
 
print(s.find("Python")) # Output: 7

在上面的例子中,你可以找到字符串"Python""Hello, Python!"中的起始位置。 在这个例子中,7被返回,这意味着字符串"Python"从索引7开始。

默认情况下,find()函数返回你要寻找的字符串的第一次出现的索引值。对于搜索多个字符串,见第4节

该函数还可以选择接受另外两个参数: start indexend index,它们可以分别用于以下情况。

s = "Hello, Python! Python is great."
 
print(s.find("Python")) # Output: 7
print(s.find("Python", 10)) # Output: 15
print(s.find("Python", 0, 15)) # Output: 7

在上面的例子中,第二个print语句显示了find()函数收到起始索引时的行为。 因为它从索引10开始,相当于在字符串s[10:]中找到一个位置,或"hon! Python是伟大的。"

类似地,例子中的第三条print语句被带到末尾的索引,相当于找到由s[0:15]切分的子串中的位置。

如果你想找到某个字符串的最后一个索引,你可以使用rfind()函数,其工作原理是一样的。 这个函数从字符串的末尾开始搜索,所以它将找到某个特定字符串出现的最后一个索引。 注意,还有一个与index()函数相对应的rindex()函数,我们将在[第2节](#2)中讨论。

1.1. 不区分大小写的查找

正如我们在Python字符串比较一文中所看到的,Python字符串类的__eq__()方法是区分大小写的,因为它比较的是Unicode代码值。 如果你想使用find()函数来寻找一个字符串的不区分大小写的位置,你必须使用upper()lower()方法。

在下面的代码中,我将找到的字符串和被找到的字符串都转换为小写,以便进行不区分大小写的搜索。

s = "Hello, Python!"
s.lower().find("python".lower()) # Output: 7

2. find()和index()函数的区别

find()函数和index()函数都是用来在一个字符串中寻找特定子串的方法。 如果搜索成功,你不会看到这两种方法有任何区别。 然而,如果搜索失败,这两种方法的区别就变得很明显。

如果你要找的字符串在搜索目标中不存在,find()函数将返回值-1并且不抛出异常。 然而,在同样的情况下,index()函数将抛出一个ValueError异常。

>>> s = "Hello, Python!"
>>> s.index("python")
Traceback (most recent call last):
File "", line 1, in
ValueError: substring not found

因此,在找不到Python字符串时,根据你想做的事情,选择并使用两种方法中适当的一种是很重要的。

3. 寻找指定数量的字符串

我们用来在Python中查找特定数量的字符串的方法是count()。 这个方法返回一个给定子串在目标字符串中出现次数的计数。 可以选择,像find()index()方法一样,你也可以指定一个索引来开始和结束搜索。

基本用法是

s = "Hello, Python! Python is great."
 
print(s.count("Python")) # Output: 2
print(s.count("Python", 2, 14)) # Output: 1

上面代码中的第一个print语句打印出字符串"Python"的出现次数。在本例中,它返回2

第二条print语句取了开始索引、结束索引,并在此基础上返回一个不同的值。

正如你所看到的,count()方法对于快速确定字符串中某一子串的出现频率非常有用,可以用于需要分析字符串的各种情况。

4. 查找一个字符串的所有出现次数

在Python中,有三种主要的方法来查找一个字符串的所有出现。 第一种是使用find()函数,另外两种是使用正则表达式re模块。

4.1. 使用find()函数查找多个字符串

正如在第1节中提到的,Python的find()函数只返回一个子串第一次出现的索引。 因此,它必须和一个循环一起使用,以查找多个字符串的位置。

有许多不同的方法来实现这一点,但在这里我们将看一下最简单的实现代码。

s = "Hello, Python! Python is great."
 
start = 0
while start != -1:
    start = s.find("Python", start)
    if start != -1:
        print(start)
        start += 1

上面的代码使用find()函数作为参数的起始索引和搜索失败时返回的值-1获得多个字符串位置。

4.2. 用re.finditer()函数获取多个字符串位置

Python re模块是一个库,可以帮助你用直观的模式和方法来利用强大的正则表达式。

re模块内的函数中,finditer()函数返回一个可迭代的列表,其中包含所有与给定模式匹配的对象。 这在搜索多个字符串位置时很有用,因为这些匹配对象包含位置索引。 位置索引是通过匹配对象的.start()方法获得的。

下面是如何使用它

import re
 
s = "Hello, Python! Python is great."
matches = re.finditer("Python", s)
indices = [match.start() for match in matches]
 
print(indices) # 출력: [7, 15]

你可以用各种方式来使用它,例如用列表理解法,如上图所示。

5. 总结

在这篇文章中,我们已经介绍了在 Python 中查找字符串的四种不同方法。 由于Python对字符串操作的强大支持,我们能够以各种方式搜索子串。 我希望你发现这篇文章在你的实际项目中很有用。

copyright for Python string find

© 2023 All rights reserved.