python字符串操作,在字符串中找到一个子字符串

这个问题在这里已经有了答案:

  • 有没有办法在Python中对字符串进行子串处理? 10个答案

  • 你必须使用output[begin:end] ,而不是output[begin, end] (这只是如何切片普通字符串/列表/等工作的语法)。 所以:

    minusStuffBeforeReqPer = output[reqPerIndx:len(output)]
    

    但是,这是多余的。 所以你应该改为这样做:

    minusStuffBeforeReqPer = output[reqPerIndx:]
    

    通过省略切片的end部分,切片将一直到output结束。


    因为你已经传递了一个元组( (reqPerIndx, len(output))给分片[...] ),并且你得到一个关于int没有__getitem__的错误,所以你得到一个关于访问没有[0]的元组的错误,因为当你写reqPerIndx[0] ,你试图获得reqPerIndx0个元素,这是一个整数,但当然没有“整数的第0个元素”这样的东西,因为整数没有元素。


    正如@AshwiniChaudhary在注释中指出的那样,如果未找到子字符串, str.find将返回-1 。 如果你确定你正在寻找的东西总是可以在output找到,我想你不需要处理-1情况,但无论如何,这可能是一个好主意。

    reqPerIndx = output.find(reqPerStr)
    if reqPerIndx != -1:
        minusStuffBeforeReqPer = ...
        # etc
    else:
        # handle this case separately
    

    正则表达式可能会带来更好的运气。 我不知道output是什么样的,所以我只是猜测 - 你应该适应这个来匹配你output任何东西。

    >>> import re
    >>> re.findall(r'(?:Requests per second:)s*(d+)', "Requests: 24")
    []
    >>> re.findall(r'(?:Requests per second:)s*(d+)', "Requests per second: 24")
    ['24']
    

    你在这两行中有错误:

    minusStuffBeforeReqPer = output[reqPerIndx[0], len(output)]
    instanceTestObj.reqPerSec = minusStuffBeforeReqPer[semiColIndx+1, eolIndx]
    

    你必须使用:来创建一个范围。 start:end

    您可以省略最后一个参数来结束或省略第一个参数以省略开始。 参数也可以是负数。 由于find可能返回-1你必须以不同的方式处理它,因为如果找不到字符串,最终会得到:

    minusStuffBeforeReqPer = output[-1:]
    

    这是字符串中的最后一个字符。

    你应该看起来像这样的代码:

    #output contains the string reqPerStr.
    reqPerStr = "Requests per second:"
    reqPerIndx = output.find(reqPerStr)
    if reqPerIndx != -1:
        minusStuffBeforeReqPer = output[reqPerIndx[0]:]
        eolIndx = minusStuffBeforeReqPer.find("n")
        semiColIndx = minusStuffBeforeReqPer.find(":")
    
        if eolIndx > semiColIndx >= 0:
    
            instanceTestObj.reqPerSec = minusStuffBeforeReqPer[semiColIndx+1:eolIndx]
    

    这很好,但是,你一定要用正则表达式改变代码。 据我所知,你真的想匹配一个以reqPerStr并以n结尾的字符串,并获得介于:n之间的所有内容。

    你可以用这样的模式来做到这一点:

    "Requests per second:(.*)n"
    

    你最终会得到:

    import re
    
    reqPerIndx = output.find(reqPerStr)
    
    match = re.match("Requests per second:(.*)n", output)
    if match:
        instanceTestObj.reqPerSec = match.group(1)
    

    如果你想找到所有匹配,你可以这样做:

    for match in re.finditer("Requests per second:(.*)", output)
        instanceTestObj.reqPerSec = match.group(1)
    
    链接地址: http://www.djcxy.com/p/55115.html

    上一篇: python string manipulation, finding a substring within a string

    下一篇: Printing specific parts of a string in python