【问题标题】:How to make string check case insensitive?如何使字符串检查不区分大小写?
【发布时间】:2011-08-18 21:32:02
【问题描述】:

我最近开始学习 Python,作为练习,我正在开发一款基于文本的冒险游戏。现在代码实际上是无效的,因为它会检查用户的响应以查看它是否与同一个单词的多个变体相同。如何更改它以使字符串检查不区分大小写?

示例代码如下:

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')

【问题讨论】:

  • 请注意,表达式'power' and 'POWER' 不会像您认为的那样做,它只会计算为'POWER',并且在字符串上调用str(...) 可能是多余的,并且可能会破坏您的程序(例如,它可能会为某些自定义字符串或类似字符串的类破坏它)。

标签: python string case-insensitive


【解决方案1】:

使用 .casefold() 而不是 .lower(),尤其是在处理可能不是 ASCII 文本的数据时。

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

请参阅https://stackoverflow.com/a/45745761/14816491,了解有关折叠式折叠和下折叠式之间差异的详细信息

【讨论】:

    【解决方案2】:

    str 类型/对象有一个专门用于无大小写比较的方法。

    在 python3 提示符下:

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

    因此,如果您将 .casefold() 添加到任何字符串的末尾,它将全部为小写。

    例子:

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

    【讨论】:

      【解决方案3】:

      如果你要进行精确比较的话。

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

      或者这个,如果你正在做子字符串比较。

      if "power" in choice.lower():
      

      如果您感兴趣,您也可以使用choice.lower().startswith( "power" )

      【讨论】:

        【解决方案4】:
        if 'power' in choice.lower():
        

        应该这样做(假设choice 是一个字符串)。如果choice 包含单词power,这将是正确的。如果要检查是否相等,请使用 == 而不是 in

        此外,如果您想确保匹配 power 仅作为整个单词(而不是作为 horsepowerpowerhouse 的一部分),请使用正则表达式:

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

        【讨论】:

        • 见下文,双重评论。 :S
        • 非常感谢。不过,问题是:choice.lower() 是如何工作的?我认为这意味着它只会搜索选择的小写单词。
        • .lower() 方法返回它所应用的字符串的小写等效值。打开 Python 解释器并输入 "ErklÄrBäR".lower()。你会得到'erklärbär'
        • 以及如何搜索小写单词的小写等值词使其不区分大小写,确切地说? xD
        • "power" == "POWER".lower() == "PoWeR".lower() == "power".lower()
        【解决方案5】:

        使用str.lower() 将所有条目转换为小写,并且仅根据小写可能性检查字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-22
          • 1970-01-01
          • 1970-01-01
          • 2016-01-26
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多