Python find和rfind查找字符出现的索引并取出字符
背景:想取出某个字符串中的一部分。该字符有一定特征:一些字符间有符号'-',可以借助这些特征来提取字符。本文介绍find和rfind来帮助大家提取出来字符串。
举例子:12345-6789-OpenStackVm,OpenStackVm-01或-02或-0X,qwertyui-OpenStackVm-01,要从这些字符中过滤出来含有OpenStackVm这几个字符,然后和预期进行对比,使用find和rfind即可。
特殊说明下,OpenStackVm这几个字符只是举例,也有可能是OpenStackHost等不固定的字符,但是特征都一样:要么取到首部要么取到尾部要么取到中间位置的字符(通过-等字符可以找到一定的位置)。
find() 返回所查找字符串第一次出现的索引,如果没有匹配项则返回-1。
rfind() 返回所查找字符串第最后一次出现的索引,如果没有匹配项则返回-1。
find和rfind的使用方法一样,以find为例。
str.find(substr, start, end),其中substr是要找的字符串,start是开始查找的索引且包含此索引,end是结束查找的索引且不包含此索引,str是想要查找substr的字符串。
通过substr索引,取末尾字符,str='12345-6789-OpenStackVm'
str[str.rfind("-") +1:]
即可获取到OpenStackVm,其中str.rfind("-") 返回10,从最后一位开始第一次出现"-"字符的索引(正常索引从0开始计数),从11位开始算就是O字符,则剩余的为OpenStackVm。
通过substr索引,取首部字符,str="OpenStackVm-01"或-02或-0X
str[:str.find("-")]
即可获取到OpenStackVm,其中str.find("-") 返回11,从第一位开始第一次出现"-"字符的索引(正常索引从0开始计数),从第1位开始算到第11位就是OpenStackVm。
通过substr索引,取某中间位置字符,str="qwertyui-OpenStackVm-01"
str[str.find("-")+1:str.rfind("-")]
即可获取到OpenStackVm,其中str.find("-") 返回8,从第一位开始第一次出现"-"字符的索引(正常索引从0开始计数),str.rfind("-") 返回20,从最后一位开始第一次出现"-"字符的索引(正常索引从0开始计数)从第9位开始算到第20位就是OpenStackVm。
当然如果是仅仅为了得到OpenStackVm,你还可以这样处理
str.find("OpenStackVm")或str.rfind("OpenStackVm")
当返回值为非-1时则表示该字符串中有你想要的字符(注意区分大小写)。
当返回值为0则表示在字符串的首部
其他值则表示为该字符在字符串中真实的位置。
当substr出现多次时,还可以这样取字符,str="123456-OpenStackVm-robot-01"或-test-02或-boy-0X
str[str.find("-")+1:str.rfind("-", 0, str.rfind("-")-1)]
str="123456-OpenStackVm-robot-01"整体思路是先找到01前面的"-"的索引x,然后从第1位开始到x这个位置的前1个字符,再接着找robot前面的"-"的索引y,也就是OpenStackVm后的"-"的索引y,接下来再找OpenStackVm前的"-"的索引z。
str.rfind("-")-1)先找到倒数第二次出现"-"的位置,注意为何是减1呢?虽然倒数第1次出现"-"和倒数第2次出现"-"的中间字符不固定,有可能5个有可能4个,只要找到倒数第1次出现"-"的索引x的前面1个字符的索引即可。
str.rfind("-", 0, str.rfind("-")-1)从第1位开始到出现倒数第2次出现"-"的中间这些字符中,再找倒数第1次出现"-"的索引y。
str.find("-")+1 从第1次出现"-"的索引z的下一个位置开始。