2015-04-02 35 views

回答

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' 
+0

太感謝你了:) :)概率解決:) – 2015-04-02 11:53:15

2

str.find返回第一個出現的字符匹配的指數,因此0返回

>>> s.find('class') 
0 

docs

返回的最低索引串在子子發現

因此,你需要添加find字符串的長度,使用len功能

>>> name=s[s.find("class")+len('class'):s.find(":")] 
>>> print name 
computer 
得到正確的輸出

注 - 您不應該使用str作爲變量,因爲它會隱藏內置功能

+2

不要使用'str'作爲變量名! – 2015-04-02 11:45:13

+0

尋找類後可能更容易分裂 – 2015-04-02 11:48:19

+0

最好的方法是's.split('class')[1] [: - 1]'。但是,我們補充說嗎? – 2015-04-02 11:49:55

1

如果喲u必須在其類中的任何其他文字的發現會失敗,你可以使用Word邊界的正則表達式來查找單詞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在你的字符串,你可以使用一個超前與向後斷言:

s = "subclass class tv class computer :" 
print(re.findall(r"(?<=\bclass\b)\s+\w+\s+(?=:)",s)) 

[' computer '] 
+0

完整答案! ;) – Kasramvd 2015-06-11 22:24:54