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 index
和end 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对字符串操作的强大支持,我们能够以各种方式搜索子串。 我希望你发现这篇文章在你的实际项目中很有用。
