i= "March 31st 2013 ntp[22123] Time server offset -.00354 sec"
i= "March 1st 2013 ntp[22485] Time server offset -.0070 sec"
Run Code Online (Sandbox Code Playgroud)
字符串看起来相同,但有时字符数会有所不同。如果我尝试仅提取字符串的最后一部分,它将无法工作"-.0070 sec" with i=i [-11:]。
我想知道我是否可以搜索单词"offset",找到它在字符串中的位置,然后用它来消除字符串的其余部分以保留"-.00354 sec" or "-.0070 sec".
例如,有 46 个字符,"March 31st 2013 Time server offset -.00354 sec"并且offset是字符串的第 28 位的开始。从字符串开头算起的总共 34 个字符将被删除。
text.rfind返回最后一次出现的索引offset:
In [162]: text = "March 1st 2013 ntp[22485] Time server offset -.0070 sec"
In [181]: text.rfind('offset')
Out[181]: 38
Run Code Online (Sandbox Code Playgroud)
所以你可以像这样切割字符串'offset ':
In [183]: text[text.rfind('offset ')+len('offset '):]
Out[183]: '-.0070 sec'
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用str.rpartition将其切成text三块,然后挑选第三块(也是最后一块):
In [179]: text.rpartition('offset ')
Out[179]: ('March 1st 2013 ntp[22485] Time server ', 'offset ', '-.0070 sec')
In [169]: text.rpartition('offset ')[-1]
Out[169]: '-.0070 sec'
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用str.rsplit在最后一次出现 时分割字符串'offset ':
In [180]: text.rsplit('offset ', 1)
Out[180]: ['March 1st 2013 ntp[22485] Time server ', '-.0070 sec']
In [172]: text.rsplit('offset ', 1)[1]
Out[172]: '-.0070 sec'
Run Code Online (Sandbox Code Playgroud)
in指示最多分割到 1 个1位置。text.rsplit('offset ', 1)rsplittext
rfind,rsplit并且rpartition每个都从右侧开始对字符串进行操作。因此,即使text包含子字符串'offset '两次,他们仍然会找到子字符串的最后一次出现。