习惯于写JavaScript,当用python判断字符串是否包含某子串,第一时间想到indexOf,果然python字符串确实有index方法。
String.index() 方法
Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内。如果str不在 string中会报一个异常。
>» “javap|python|ruby”.index(“python”) 6 »> “javap|python|ruby”.index(“pythonic”) Traceback (most recent call last): File “”, line 1, in
ValueError: substring not found
index()方法是可用的,但**如果str不在 string中会报一个异常,**就需要写一个方法把这index产生的错误包起来,再把返回一个数值或真假判断。
这就不pythonic了。好在python有其它更简单的方法:
in 运算符
>» longstring = “www.mzh.ren” … substring = “mzh” … if substring in longstring: … print(“找到子串”) … else: … print(“未找到子串”) …
in 运算符会调用对象内置的__contains__
方法,该运算符也可用于list,tuple等对象。
String.find() 方法
>» “javap|python|ruby”.index(“python”) 6 »> “javap|python|ruby”.find(“python”) 6 »> “javap|python|ruby”.find(“pythonic”) -1
String.find()与String.index()使用上类似,只是find在未找到字串时,会返回-1,如果你不想try catch错误,你应该选用find()。
String.count() 方法
String.count函数会返回字符串的子字符串出现的次数。如果没有找到子字符串,返回0。
>> “javap|python|ruby”.count(“python”) 1 »> “javap|python|ruby”.count(“pythonic”) 0
这个方法很灵活,但效率上应该(未测试,纯猜测)不如find,index。
正则表达式
正则表达式提供了一种更加灵活也更复杂的检查字符串的匹配方法。
Python内置正则表达式模块 re
。re模块包含一个名为 search
函数,我们可以使用它来匹配子串,如下:
from re import search
longstring = “http://www.mzh.ren” substring = “mzh.ren”
if search(substring, longstring): print(“找到子串!") else: print(“未找到字串!")
参考资料