How to match a substring in a string, ignoring case

Try:

if haystackstr.lower().find(needlestr.lower()) != -1:
  # True

If you don't want to use str.lower(), you can use a regular expression:

import re

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

One can use the in operator after applying str.casefold to both strings.

str.casefold is the recommended method for use in case-insensitive comparison.

Return a casefolded copy of the string. Casefolded strings may be used for caseless matching.

Casefolding is similar to lowercasing but more aggressive because it is intended to remove all case distinctions in a string. For example, the German lowercase letter 'ß' is equivalent to "ss". Since it is already lowercase, lower() would do nothing to 'ß'; casefold() converts it to "ss".

The casefolding algorithm is described in section 3.13 of the Unicode Standard.

New in version 3.3.

For case-insensitive substring search:

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

For case-insensitive string comparison:

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

There's another post here. Try looking at this.

BTW, you're looking for the .lower() method:

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

Tags:

Python

Perl