str="class computer :"
name=str[str.find("class"):str.find(":")]
print name
上面的代碼必須輸出結果爲我得到的" computer "
,"class computer"
。什麼可能是錯誤?如何在約束條件下切分python中的特定字符?
str="class computer :"
name=str[str.find("class"):str.find(":")]
print name
上面的代碼必須輸出結果爲我得到的" computer "
,"class computer"
。什麼可能是錯誤?如何在約束條件下切分python中的特定字符?
一旦你.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'
str.find
返回第一個出現的字符匹配的指數,因此0
返回
>>> s.find('class')
0
從docs
返回的最低索引串在子子發現
因此,你需要添加find
字符串的長度,使用len
功能
>>> name=s[s.find("class")+len('class'):s.find(":")]
>>> print name
computer
得到正確的輸出
注 - 您不應該使用str
作爲變量,因爲它會隱藏內置功能
不要使用'str'作爲變量名! – 2015-04-02 11:45:13
尋找類後可能更容易分裂 – 2015-04-02 11:48:19
最好的方法是's.split('class')[1] [: - 1]'。但是,我們補充說嗎? – 2015-04-02 11:49:55
如果喲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 ']
完整答案! ;) – Kasramvd 2015-06-11 22:24:54
太感謝你了:) :)概率解決:) – 2015-04-02 11:53:15