Python 中不区分大小写的字符串比较
Case-insensitive string comparison in Python
将两个字符串都转换为小写以执行不区分大小写的字符串比较,例如if string1.lower() == string2.lower():
. 通过将两个字符串转换为相同的大小写,我们执行不区分大小写的比较。
string1 = 'Bobby' string2 = 'BOBBY' # ✅ using str.lower() if string1.lower() == string2.lower(): # 👇️ this runs print('The strings are equal when case is ignored') else: print('The strings are NOT equal when case is ignored') # ------------------------------------------------------------ # ✅ using str.casefold() if string1.casefold() == string2.casefold(): # 👇️ this runs print('The strings are equal when case is ignored') else: print('The strings are NOT equal when case is ignored')
第一个示例使用str.lower()
方法执行不区分大小写的字符串比较。
str.lower方法返回字符串
的副本,其中所有大小写字符都转换为小写。
string1 = 'Bobby' string2 = 'BOBBY' if string1.lower() == string2.lower(): # 👇️ this runs print('The strings are equal when case is ignored') else: print('The strings are NOT equal when case is ignored')
该方法不会更改原始字符串,它会返回一个新字符串。字符串在 Python 中是不可变的。
该str.lower()
方法最适合在比较 ASCII 字符串时忽略大小写。
对于非 ASCII 字符串,使用方法str.casefold()
。
使用 str.casefold() 进行不区分大小写的字符串比较
使用该str.casefold()
方法执行不区分大小写的字符串比较,例如if string1.casefold() == string2.casefold():
. 该
str.casefold()
方法删除字符串中的所有大小写区别。
string1 = 'Bobby' string2 = 'BOBBY' if string1.casefold() == string2.casefold(): # 👇️ this runs print('The strings are equal when case is ignored') else: print('The strings are NOT equal when case is ignored')
str.casefold方法返回字符串的
casefolded 副本。
# 👇️ using str.casefold() print('BOBBY'.casefold()) # 👉️ bobby print('ß'.casefold()) # 👉️ ss # 👇️ using str.lower() print('BOBBY'.lower()) # 👉️ bobby print('ß'.lower()) # 👉️ ß
Casefolding 类似于小写,但更激进,因为它旨在删除字符串中的所有大小写区别。
请注意德语小写字母如何ß
等于ss
。
str.lower()
方法按原样返回该字母,同时该str.casefold()
方法将其转换为ss
.str.casefold()
如果您只比较 ASCII 字符串,则无需使用该方法。在这种情况下,使用str.lower()
就足够了。
如果您要比较的字符串包含重音符号,请使用该
unicodedata.normalize()
方法。
使用 unicodedata.normalize() 进行不区分大小写的字符串比较
使用该unicodedata.normalize()
方法执行不区分大小写的字符串比较。该unicodedata.noramlize()
方法将返回字符串的正常形式,因此带重音符号的等效字符被认为是相等的。
import unicodedata def caseless_compare(str1, str2): return (unicodedata.normalize('NFKD', str1) == unicodedata.normalize('NFKD', str2)) string1 = 'dž' string2 = 'dž' print(string1 == string2) # 👉️ False print(string1.lower() == string2.lower()) # 👉️ False print(string1.casefold() == string2.casefold()) # 👉️ False print(caseless_compare(string1, string2)) # 👉️ True
我们正在比较的字符串包含重音符号。它们代表相同的字符(或字符序列),但具有不同的视觉外观。
和方法在比较字符串方面做得不好,所以我们不得不使用该str.lower()
方法。str.casefold()
unicodedata.normalize()
unicodedata.normalize方法返回所提供的 Unicode 字符串的
标准形式。
NFKD
争论form
。范式 KD (NFKD) 应用相容性分解。换句话说,它将所有字符替换为它们的等价物。我们对示例中的两个字符串进行了规范化,以执行不区分大小写的字符串比较。
仅当您的字符串可能包含不一致的重音字符时才需要这种方法。
您应该选择哪种方法取决于您的用例。
如果您只使用 ASCII 字符串,那么使用该str.lower()
方法就足够了。