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

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 
Interesting Posts

Правильный способ эмулировать одинаковую точку с плавающей запятой в python?

Найдите пересечение двух списков?

Как перезагрузить приложение Flask каждый раз при его доступе

Проблемы с использованием модели пользователя в модульных тестах django

Сортировка по нескольким параметрам в pyes и elasticsearch

Развертывание списка или карты в качестве аргументов функции в Scala

Python: экспорт переменных среды в subprocess.Popen (..)

Какой синтаксис представлен узлом ExtSlice в AST в Python?

Какие проблемы с масштабируемостью связаны с NetworkX?

Как получить список dict вместо использования collection.defaultdict в python

быстрый способ найти наименьший положительный истинный корень четвертичного многочлена 4 степени в питоне

Тест ADF в statsmodels в Python

Autobahn отправляет пользовательские и широковещательные сообщения из внешнего приложения

Разделить столбец datetime64 на столбец даты и времени в pandas dataframe

Выдержка продолжительности видеофайла без внешнего процесса в python

Python - лучший язык программирования в мире.