从字符串中提取特定字符

Dar*_*zor 2 python string

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 个字符将被删除。

unu*_*tbu 5

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


rfindrsplit并且rpartition每个都从右侧开始对字符串进行操作。因此,即使text包含子字符串'offset '两次,他们仍然会找到子字符串的最后一次出现。