How to make string check case insensitive?

53,292

Solution 1

if 'power' in choice.lower():

should do (assuming choice is a string). This will be true if choice contains the word power. If you want to check for equality, use == instead of in.

Also, if you want to make sure that you match power only as a whole word (and not as a part of horsepower or powerhouse), then use regular expressions:

import re
if re.search(r'\bpower\b', choice, re.I):

Solution 2

This if you're doing exact comparison.

if choice.lower() == "power":

Or this, if you're doing substring comparison.

if "power" in choice.lower():

You also have choice.lower().startswith( "power" ) if that interests you.

Solution 3

The str type/object has a method specifically intended for caseless comparison.

At the python3 prompt:

>>> help(str)
...
 |  casefold(...)
 |      S.casefold() -> str
 |      
 |      Return a version of S suitable for caseless comparisons.
...

So, if you add .casefold() to the end of any string, it will give you all lowercase.

Examples:

>>> "Spam".casefold()
'spam'
>>> s = "EggS"
>>> s.casefold()
'eggs'
>>> s == "eggs"
False
>>> s.casefold() == "eggs"
True

Solution 4

use str.lower() to convert all entries to lowercase and only check the string against lower case possibilities.

Solution 5

Use .casefold() over .lower(), especially when working with data that might not be ASCII text.

>>> 'MyString'.casefold()
'mystring'

See https://stackoverflow.com/a/45745761/14816491 for detailed information on the differences between casefold and lower

Share:
53,292

Related videos on Youtube

Jack
Author by

Jack

Updated on December 17, 2020

Comments

  • Jack
    Jack over 3 years

    I've started learning Python recently and as a practise I'm working on a text-based adventure game. Right now the code is really ineffective as it checks the user responce to see if it is the same as several variations on the same word. How do I change it so the string check is case insensitive?

    Example code below:

    if str('power' and 'POWER' and 'Power') in str(choice):
        print('That can certainly be found here.')
        time.sleep(2)
        print('If you know where to look... \n')
    
    • Rosh Oxymoron
      Rosh Oxymoron about 13 years
      Please note that the expression 'power' and 'POWER' doesn't do what you think it does, it merely evaluates to 'POWER', and that calling str(...) on the strings is probably redundant and possibly breaks your program (e.g. it could break it for some custom string or string-like classes).
  • Jack
    Jack about 13 years
    See below, double commented. :S
  • Jack
    Jack about 13 years
    Thanks a LOT for that. Question, though: How does choice.lower() work? I assumed this means it would seach the lowercase words of choice only.
  • Tim Pietzcker
    Tim Pietzcker about 13 years
    The .lower() method returns the lowercase equivalent of the string it is applied to. Open your Python interpreter and enter "ErklÄrBäR".lower(). You'll get 'erklärbär'.
  • Jack
    Jack about 13 years
    And how does searching the lower case equivelant of a lower case word make it case insensitive, exactly? xD
  • Tim Pietzcker
    Tim Pietzcker about 13 years
    "power" == "POWER".lower() == "PoWeR".lower() == "power".lower()
  • Mike Fisher
    Mike Fisher over 3 years
    By the way, this solution suffers from the Turkish I problem. You might not get the expected result if this is run on a system with a different locale.