2
i= "March 31st 2013 ntp[22123] Time server offset -.00354 sec"

i= "March 1st 2013 ntp[22485] Time server offset -.0070 sec"

字符串看起来相同,但有时字符数会有所不同。如果我尝试仅提取字符串的最后一部分,它将不起作用"-.0070 sec" with i=i [-11:]

我想知道我是否可以搜索单词"offset",找到它在字符串中的位置,然后用它来消除字符串的其余部分以保留"-.00354 sec" or "-.0070 sec".

例如,有 46 个字符,"March 31st 2013 Time server offset -.00354 sec"并且offset是字符串第 28 位的开始。字符串开头的总共 34 个字符将被删除。

4

4 回答 4

4

text.rfind返回最后一次出现的索引offset

In [162]: text = "March 1st 2013 ntp[22485] Time server offset -.0070 sec"

In [181]: text.rfind('offset')
Out[181]: 38

所以你可以像这样剪断字符串'offset '

In [183]: text[text.rfind('offset ')+len('offset '):]
Out[183]: '-.0070 sec'

或者,您可以使用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'

或者,您可以使用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'

1intext.rsplit('offset ', 1)告诉最多rsplit拆分1个text位置。


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

于 2013-03-31T23:42:52.010 回答
0

offset然后用尾随空格分割单词上的字符串:

line.split('offset ', 1)[-1]

这需要该词后面的所有内容。

演示:

>>> text = "March 1st 2013 ntp[22485] Time server offset -.0070 sec"
>>> text.split('offset ', 1)[-1]
'-.0070 sec'
于 2013-03-31T23:44:32.583 回答
0

您可以使用正则表达式:

import re

strings=['March 31st 2013 ntp[22123] Time server offset -.00354 sec', 
        'March 1st 2013 ntp[22485] Time server offset -.0070 sec']

for s in strings:
    print re.search(r'offset -(\.\d+) sec$',s).group(1)     

印刷:

.00354
.0070

或者,如果您想包含以下内容,请移动括号-

print re.search(r'offset (-\.\d+) sec$',s).group(1) 

或者,如果它是可选标志,请执行以下操作:

strings=['March 31st 2013 ntp[22123] Time server offset -.00354 sec', 
        'March 1st 2013 ntp[22485] Time server offset -.0070 sec',
        'March 1st 2013 ntp[22485] Time server offset .0070 sec']

for s in strings:
    print re.search(r'offset ((?:-)?\.\d+) sec$',s).group(1)      

使用$锚点,它只会返回字符串中的最后一个(如果找到)。

于 2013-03-31T23:48:41.063 回答
0

你可以像这样使用正则表达式:

>>> i = "March 31st 2013 ntp[22123] Time server offset -.00354 sec"
>>> pattern = re.compile('(offset)(.+)$')
>>> offset  = pattern.findall(s)[0][1]
>>> print offset
 -.00354 sec
于 2013-03-31T23:51:56.013 回答