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"
。
例如,"March 31st 2013 Time server offset -.00354 sec"
中有46个字符,offset
是字符串第28位的开头。从字符串开头总共34个字符将被删除。
答案 0 :(得分: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'
1
中的text.rsplit('offset ', 1)
告诉rsplit
将text
分成最多1个位置。
rfind
,rsplit
和rpartition
分别对右侧的字符串进行操作。因此,即使text
包含子串'offset '
两次,它们仍会找到子串的最后一次出现。
答案 1 :(得分: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'
答案 2 :(得分: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)
使用$
锚点,它只返回字符串中的最后一个(如果找到)。
答案 3 :(得分: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