Search code examples
pythonstringlowercase

Python convert a string to lowercase except some special strings


I'd like to convert a string to lowercase but if this string contains one of the special words it should leave as is.

specialwords = ['Special1', 'Special']

Let's say our input string is like this:

Ali is really Special.

Output should be like this:

ali is really Special

Here is the code I've used so far.

def makeUrl(inputString):
    list =  {"ı": "i",
             "I": "ı",
             "İ": "İ",
             "î": "i",
             "Ç": "c",
             "ç": "c",
             " ": "-",
             "ş": "s",
             "Ş": "s",
             "Ğ": "g",
             "ğ": "g",
             "Ü": "u",
             "ü": "u",
             "Ö": "o",
             "ö": "o",
             "!": "",
             "?": "",
             "'": "",
             "“": "",
             "”": "",
             "â": "a"}

    inputString = inputString.encode('utf8', 'replace')

    for letter in list:
        inputString = inputString.replace(letter, liste[letter])
    if "Ali" in inputString:
        return inputString
    else:
        return inputString.lower()

Solution

  • specialwords = ['Special1', 'Special']
    string = "Ali is really Special"
    
    toLower = lambda x: " ".join( a if a in specialwords else a.lower()
                for a in x.split() )
    
    print (toLower(string))
    # ali is really Special
    

    In case of any punctuations in the string, you can easily strip them off with a simple lambda:

    from string import punctuation
    p_strip = lambda x: "".join(w for w in x if w not in punctuation)
    
    string = "Ali is really Special."
    
    # Now `toLower` function should look something like this:
    toLower = lambda x: " ".join( a if p_strip(a) in specialwords else a.lower()
        for a in x.split() )