如何在Python中以不区分大小写的方式比较字符串?

我想使用简单的python代码将常规字符串的比较封装到存储库字符串中。我也想有能力在字典中查找值哈希字符串使用常规的python字符串。


当前回答

先转换成小写字母怎么样?你可以使用string.lower()。

其他回答

假设ASCII字符串:

string1 = 'Hello'
string2 = 'hello'

if string1.lower() == string2.lower():
    print("The strings are the same (case insensitive)")
else:
    print("The strings are NOT the same (case insensitive)")

从Python 3.3开始,casefold()是一个更好的选择:

string1 = 'Hello'
string2 = 'hello'

if string1.casefold() == string2.casefold():
    print("The strings are the same (case insensitive)")
else:
    print("The strings are NOT the same (case insensitive)")

如果您想要一个处理更复杂unicode比较的更全面的解决方案,请参阅其他答案。

我找到了一个干净的解决方案,我正在使用一些固定的文件扩展名。

from pathlib import Path


class CaseInsitiveString(str):
   def __eq__(self, __o: str) -> bool:
      return self.casefold() == __o.casefold()

GZ = CaseInsitiveString(".gz")
ZIP = CaseInsitiveString(".zip")
TAR = CaseInsitiveString(".tar")

path = Path("/tmp/ALL_CAPS.TAR.GZ")

GZ in path.suffixes, ZIP in path.suffixes, TAR in path.suffixes, TAR == ".tAr"

# (True, False, True, True)

这是另一个正则表达式,我已经学会了爱/恨在过去的一周,所以通常导入(在这种情况下是),反映了我的感受! 做一个正常的函数....征求意见,然后使用....东西= re.compile垃圾邮件(r 'foo * | *’,是的)……re.I(是的。我下面)是相同的IGNORECASE,但你不能犯很多错误写它!

然后你使用正则表达式搜索你的消息,但老实说,这应该是在自己的几页,但重点是,foo或垃圾邮件管道在一起,大小写被忽略。 然后,如果找到其中任何一个,lost_n_found将显示其中一个。如果都不是,则lost_n_found等于None。如果它不等于none,则使用return lost_n_find .lower()返回小写的user_input

这让你更容易匹配任何区分大小写的东西。最后(NCS)代表“没有人认真关心……!”或不区分大小写....无论哪种

如果有人有任何问题,请问我。

    import re as yes

    def bar_or_spam():

        message = raw_input("\nEnter FoO for BaR or SpaM for EgGs (NCS): ") 

        message_in_coconut = yes.compile(r'foo*|spam*',  yes.I)

        lost_n_found = message_in_coconut.search(message).group()

        if lost_n_found != None:
            return lost_n_found.lower()
        else:
            print ("Make tea not love")
            return

    whatz_for_breakfast = bar_or_spam()

    if whatz_for_breakfast == foo:
        print ("BaR")

    elif whatz_for_breakfast == spam:
        print ("EgGs")
def insenStringCompare(s1, s2):
    """ Method that takes two strings and returns True or False, based
        on if they are equal, regardless of case."""
    try:
        return s1.lower() == s2.lower()
    except AttributeError:
        print "Please only pass strings into this method."
        print "You passed a %s and %s" % (s1.__class__, s2.__class__)

你可以在str.contains()中提到case=False

data['Column_name'].str.contains('abcd', case=False)