Python 中不区分大小写的字符串比较

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()方法就足够了。

发表评论