如何忽略大小写匹配字符串中的子串
我想在Python中实现不区分大小写的字符串比较。
我尝试了以下方法:
if line.find('mandy') >= 0:
但是没有成功实现不区分大小写的比较。我需要在一个给定的文本文件中查找一组单词。我是逐行读取这个文件的。某一行上的单词可能是 mandy、Mandy、MANDY 等等。(我不想使用 toupper
或 tolower
之类的方法。)
我在寻找与下面的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