如何使字符串检查不区分大小写?

26

我最近开始学习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')

3
请注意,表达式'power'和'POWER'并没有你想象中的那样起作用,它仅仅评估为'POWER',而在字符串上调用str(...)可能是多余的,甚至可能会破坏你的程序(例如,对于某些自定义的字符串或字符串类,它可能会破坏程序)。 - Rosh Oxymoron
5个回答

39
if 'power' in choice.lower():
如果假设choice是字符串,应该使用in关键字来判断是否包含单词power。如果您想要检查相等性,请改用==而不是in
另外,如果您希望只匹配整个单词power(而不是匹配到horsepowerpowerhouse中的一部分),则需要使用正则表达式:
import re
if re.search(r'\bpower\b', choice, re.I):

请看下面,双斜杠注释。 :S - Jack
非常感谢你的帮助。不过,我有一个问题:choice.lower() 是如何工作的?我以为它只会搜索 choice 中的小写单词。 - Jack
.lower() 方法返回应用于字符串后的小写等效字符串。打开您的 Python 解释器并输入 "ErklÄrBäR".lower()。您将得到 'erklärbär' - Tim Pietzcker
搜索小写单词的等效形式如何使其不区分大小写呢?xD - Jack
"power" == "POWER".lower() == "PoWeR".lower() == "power".lower() - Tim Pietzcker
顺便提一下,这个解决方案存在土耳其语问题。如果在具有不同区域设置的系统上运行此代码,则可能无法获得预期结果。 - Mike Fisher

10

如果你需要进行精确比较,则可以使用此方法。

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

如果你正在进行子字符串比较,可以使用这种方法。

if "power" in choice.lower():

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


5

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

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

3

当涉及到可能不是ASCII文本的数据时,使用.casefold()而不是.lower()

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

请参见https://dev59.com/fFcO5IYBdhLWcg3weRhs#45745761,了解casefold和lower之间的差异详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接