2010-04-07 134 views
4
a='1234;5' 
print a.index('s') 

的錯誤是:如何找到一個字符串是否包含在另一個字符串

> "D:\Python25\pythonw.exe" "D:\zjm_code\kml\a.py" 
Traceback (most recent call last): 
    File "D:\zjm_code\kml\a.py", line 4, in <module> 
    print a.index('s') 
ValueError: substring not found 

感謝

+1

這是另外一個問題重複:http://stackoverflow.com/questions/3437059/does-python-have-a-string-contains-方法 – 2013-07-05 19:08:56

+0

在另一個字符串中的字符串?你說的。這是python – joaquin 2013-09-05 15:48:18

+0

@安德森:同意,它應該被重複關閉。 – lpapp 2013-09-05 18:47:36

回答

9

使用find()嘗試,而不是 - 這將告訴你它是字符串中:

a = '1234;5' 
index = a.find('s') 
if index == -1: 
    print "Not found." 
else: 
    print "Found at index", index 

如果你只是想知道該字符串是否就在那裏,你可以使用in

>>> print 's' in a 
False 
>>> print 's' not in a 
True 
6
print ('s' in a)  # False 
print ('1234' in a) # True 

使用find如果您需要的指數爲好,但不希望引發異常。

print a.find('s') # -1 
print a.find('1234') # 0 
3

可以使用in運營商,如果你只是想檢查一個子是否在一個字符串。

if "s" in mystring: 
    print "do something" 

否則,您可以使用find()和檢查-1(未找到)或使用index()

3

str.find()str.index()幾乎是一樣的。最大的區別在於,如果找不到字符串,str.index()會拋出錯誤,就像您得到的錯誤一樣,而str.find()會像其他人發佈一樣返回-1。

有兩種叫做str.rfind()str.rindex()的姊妹方法,它們從字符串的末尾開始搜索,並朝着開頭工作。

此外,正如其他人已經表明,在in運營商(以及not in)是完全有效的爲好。

最後,如果你想在字符串中尋找模式,你可能會考慮使用正則表達式,儘管我認爲太多的人在他們過度使用時使用它們。在其他(着名)詞中,「now you have two problems」。

這就像我現在所有的信息。但是,如果你正在學習Python和/或學習編程,一個非常有用的練習,我給我的學生是自己嘗試和Python代碼構建*find()*index(),甚至innot in(儘管功能)。你會得到很好的練習遍歷字符串,就現有字符串方法的工作原理而言,你將會有更好的理解。

好運!

+0

正則表達式過度?爲什麼?對大多數字符串匹配算法進行編程可能沒有更高效和更清晰的方法。 – 2011-02-28 15:44:00

+1

對於可以使用find()和index()等工具完成的簡單搜索,正則表達式不是一個好選擇,因爲它們在未經仔細檢查的情況下往往難以閱讀。能夠瀏覽正則表達式並捕捉它所嘗試做的所有細節的情況很少見。對於複雜的模式,它們可以非常有效,但可維護性可能成爲問題。 – 2013-09-05 16:04:59

0

這是檢查子串是否存在於字符串中的正確方法。

高清海(STR,STR1):

if(str1[0:] in str): 

    return "yes" 
else: 
    return "no" 
print(sea("sahil","ah")) 
相關問題