python string manipulation, finding a substring within a string
我试图在Python中的较大字符串中找到一个子字符串。我试图找到字符串"每秒请求数:"后的文本。似乎我对python字符串和python的一般知识是缺乏的。
我的错误是在代码的第3行
代码
1 2 3 4 5 6 7 8 | #output contains the string reqPerStr. reqPerStr ="Requests per second:" reqPerIndx = output.find(reqPerStr) minusStuffBeforeReqPer = output[reqPerIndx[0], len(output)] eolIndx = minusStuffBeforeReqPer.find(" ") semiColIndx = minusStuffBeforeReqPer.find(":") instanceTestObj.reqPerSec = minusStuffBeforeReqPer[semiColIndx+1, eolIndx] |
您必须使用
1 | minusStuffBeforeReqPer = output[reqPerIndx:len(output)] |
然而,这是多余的。所以你应该做的是:
1 | minusStuffBeforeReqPer = output[reqPerIndx:] |
通过省略片的
在没有
正如@ashwinichaudhary在评论中指出的那样,如果没有找到子字符串,
1 2 3 4 5 6 | reqPerIndx = output.find(reqPerStr) if reqPerIndx != -1: minusStuffBeforeReqPer = ... # etc else: # handle this case separately |
你可能对正则表达式有更好的运气。我不知道
1 2 3 4 5 | >>> 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'] |
这两行有错误:
1 2 | minusStuffBeforeReqPer = output[reqPerIndx[0], len(output)] instanceTestObj.reqPerSec = minusStuffBeforeReqPer[semiColIndx+1, eolIndx] |
您必须使用
可以省略最后一个参数以到达结尾,也可以省略第一个参数以省略开头。参数也可以是负数。由于find可能返回
1 | minusStuffBeforeReqPer = output[-1:] |
这是字符串中的最后一个字符。
您应该有这样的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | #output contains the string reqPerStr. reqPerStr ="Requests per second:" reqPerIndx = output.find(reqPerStr) if reqPerIndx != -1: minusStuffBeforeReqPer = output[reqPerIndx[0]:] eolIndx = minusStuffBeforeReqPer.find(" ") semiColIndx = minusStuffBeforeReqPer.find(":") if eolIndx > semiColIndx >= 0: instanceTestObj.reqPerSec = minusStuffBeforeReqPer[semiColIndx+1:eolIndx] |
这很好,但是,您必须用regex更改代码。据我所知,你真的想匹配一个以
你可以用这样的模式来做到:
1 2 | "Requests per second:(.*) " |
你最终会得到:
1 2 3 4 5 6 7 8 | import re reqPerIndx = output.find(reqPerStr) match = re.match("Requests per second:(.*) ", output) if match: instanceTestObj.reqPerSec = match.group(1) |
如果要查找所有匹配项,可以执行以下操作:
1 2 | for match in re.finditer("Requests per second:(.*)", output) instanceTestObj.reqPerSec = match.group(1) |