Python: 3 ways to compare 2 strings ignoring case sensitivity

Updated: May 26, 2023 By: Khue Post a comment

Ignoring case when comparing strings is useful in scenarios where you want to perform case-insensitive matching, especially when validating user input (e.g., email addresses, usernames, captchas, coupon codes). It ensures that strings with different case variations are considered equivalent, enhancing flexibility and user-friendliness

This concise code-centric article will walk you through a few different ways to compare two strings ignoring case sensitivity in Python.

Using the casefold() method

The casefold() method is specifically designed for string careless comparison. It provides accurate results even for special characters and different language cases. Here are what we will do with this method:

  1. Convert both strings to a casefolded representation using the casefold() method.
  2. Compare the casefolded versions of the strings for equality by using the == operator.

Example:

string1 = "Sling Academy"
string2 = "sling academy"

if string1.casefold() == string2.casefold():
    print("The strings are equal")
else:
    print("The strings are not equal")

Output:

The strings are equal

Using regular expressions

Regular expressions provide more flexibility for advanced string matching and manipulation. They allow fine-grained control over the comparison process, such as specifying pattern-matching rules. However, the trade-off is the increase in complexity.

The steps to follow are:

  1. Import the re module for regular expressions.
  2. Use the re.IGNORECASE flag to perform a case-insensitive comparison.
  3. Use the re.match() or re.search() function to compare the strings.

Example:

import re

string1 = "Sling Academy"
string2 = "sling ACADEMY"

# re.IGNORECASE flag to perform a case-insensitive comparison
pattern = re.compile(re.escape(string1), re.IGNORECASE)

match = pattern.match(string2)
are_equal = bool(match)

if are_equal:
    print("The strings are equal (ignoring case)")
else:
    print("The strings are not equal (ignoring case)")

Output:

The strings are equal (ignoring case)

Using the lower() or upper() method

Another strategy for careless comparison is to turn both the input string into lowercase or uppercase (by using the lower() or upper() method, respectively), then compare the resulting strings with the == operator.

Example:

s1 = "Welcome to Sling Academy!"
s2 = "welcome to sling academy!"

# using lower() 
if(s1.lower() == s2.lower()):
    print("The strings are euqal.")
else:
    print("The strings are not equal.")

# using upper()
if(s1.upper() == s2.upper()):
    print("The strings are euqal.")
else:
    print("The strings are not equal.")

Output:

The strings are euqal.
The strings are euqal.

Using the lower() or upper() method is a little bit faster than using casefold() when performing bulk case-insensitive comparisons (e.g., with a loop). However, this approach may not work well with some languages due to language-specific rules for case conversion. The lower() and upper() methods rely on the default case conversion rules in Python, which may not accurately handle certain characters or special cases in different languages. In such situations, using casefold() or regular expressions with appropriate Unicode support would be more suitable and accurate.