2010-04-07 135 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")) 
相关问题