Извлечение определенных символов из строки

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 символа от начала строки будут удалены.

4 Solutions collect form web for “Извлечение определенных символов из строки”

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 ' подстроки дважды, они все равно найдут последнее вхождение подстроки.

Разделите строку на offset слова, затем с конечным пространством:

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

Это занимает все, что следует за этим словом.

Демо-версия:

 >>> text = "March 1st 2013 ntp[22485] Time server offset -.0070 sec" >>> text.split('offset ', 1)[-1] '-.0070 sec' 

Вы можете использовать регулярное выражение:

 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) 

С помощью $ anchor он возвращает только последний (если найден) в строке.

Вы можете использовать регулярные выражения следующим образом:

 >>> 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 
  • Подавить / печатать без префикса b для байтов в Python 3
  • Печать каждого элемента переменной в отдельной строке в Python
  • Python конвертирует строку в float
  • python json dump writeability "не умеет писать"
  • Как заполнить все цифры в строке
  • Как написать исходные двоичные данные в Python?
  • Как преобразовать «двоичную строку» в обычную строку в Python3?
  • Pandon Pandas Замена заголовка верхней строкой
  • Как декодировать массив numpy dtype = numpy.string_?
  • Счетные строки в строке
  • Как проверить, содержит ли строка какие-либо буквы из алфавита?
  • Python - лучший язык программирования в мире.