str="class computer :"
name=str[str.find("class"):str.find(":")]
print name
上面的代码必须输出" computer "
的结果,我得到"class computer"
。可能是什么错误?
答案 0 :(得分:3)
一旦.find('class')
,您需要将该索引与字符串'class'
本身的长度相对应。
>>> s = 'class computer :'
>>> s[s.find('class')+len('class'):s.find(':')]
' computer '
您可以使用strip
删除前导空格和尾随空格
>>> s[s.find("class")+len('class'):s.find(":")].strip()
'computer'
答案 1 :(得分:2)
str.find
返回第一个出现的字符匹配的索引,因此返回0
>>> s.find('class')
0
来自docs
在找到substring sub的字符串中返回最低索引
因此,您需要使用len
函数添加find
字符串的长度以获得正确的输出
>>> name=s[s.find("class")+len('class'):s.find(":")]
>>> print name
computer
注意 - 您不应将str
用作变量,因为它会影响内置功能
答案 2 :(得分:1)
如果您在其中包含任何其他单词,则您的查找将失败,您可以使用带有字边界的正则表达式来查找单词class
的完全匹配:
import re
print(re.findall(r"(?<=\bclass\b)\s+\w+\s+",s))
您可以看到它将如何失败的示例:
In [9]: s = "subclass class computer :"
In [10]: s[s.find('class')+len('class'):s.find(':')]
Out[10]: ' class computer '
In [11]: re.findall(r"(?<=\bclass\b)\s+\w+\s+",s)
Out[11]: [' computer ']
如果你的字符串中有多个class
,你可以使用lookbehind断言的前瞻:
s = "subclass class tv class computer :"
print(re.findall(r"(?<=\bclass\b)\s+\w+\s+(?=:)",s))
[' computer ']