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

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 
  • Почему поиск в регулярном выражении в подстроке «не полностью эквивалентен разрезанию строки» в Python?
  • Как проверить, что строка содержит только буквы, цифры, символы подчеркивания и тире?
  • Строка в функциях Cython
  • Сделать сценарий в python, который перечисляет смежные слова через Unix?
  • Как удалить символы из строки с помощью Python?
  • Хороший способ добавить к строке
  • Получить «фактическую» длину строки в символах Юникода
  • Приблизительно преобразование строки unicode в строку ascii в python
  • Python - лучший язык программирования в мире.