如何忽略大小写匹配字符串中的子串

133 投票
10 回答
256864 浏览
提问于 2025-04-16 20:51

我想在Python中实现不区分大小写的字符串比较。

我尝试了以下方法:

if line.find('mandy') >= 0:

但是没有成功实现不区分大小写的比较。我需要在一个给定的文本文件中查找一组单词。我是逐行读取这个文件的。某一行上的单词可能是 mandyMandyMANDY 等等。(我不想使用 touppertolower 之类的方法。)

我在寻找与下面的Perl代码等效的Python代码。

if ($line=~/^Mandy Pande:/i)

10 个回答

28

你可以在对两个字符串都使用 str.casefold 之后,使用 in 操作符。

str.casefold 是进行不区分大小写比较时推荐的方法。

这个方法会返回一个处理过的字符串副本。处理过的字符串可以用于不区分大小写的匹配。

处理字符串的方式类似于将字母全部变成小写,但更彻底,因为它的目的是去掉字符串中的所有大小写区分。例如,德语的小写字母 'ß' 相当于 "ss"。因为 'ß' 已经是小写的,所以使用 lower() 对它没有任何作用;而使用 casefold() 则会把它转换成 "ss"。

casefold 的算法在 Unicode 标准的第 3.13 节中有描述。

这个功能在 3.3 版本中新增。

如果你想进行不区分大小写的子字符串搜索:

needle = "TEST"
haystack = "testing"
if needle.casefold() in haystack.casefold():
    print('Found needle in haystack')

如果你想进行不区分大小写的字符串比较:

a = "test"
b = "TEST"
if a.casefold() == b.casefold():
    print('a and b are equal, ignoring case')
45

你在找 .lower() 这个方法:

string1 = "hi"
string2 = "HI"
if string1.lower() == string2.lower():
    print("Equals!")
else:
    print("Different!")

顺便说一下,这里还有另一个帖子 在这里。可以看看这个。

226

如果你不想使用 str.lower() 这个方法,你可以用一个叫做正则表达式的东西来实现:

import re

if re.search('mandy', 'Mandy Pande', re.IGNORECASE):
    # Is True

撰写回答