Напечатать одно слово из строки в python

Как я могу напечатать только определенные слова из строки в python? скажем, я хочу напечатать только 3-е слово (которое является числом) и 10-е слово

при этом длина текста может быть разной каждый раз

mystring = "You have 15 new messages and the size is 32000"

Спасибо.


person Shai    schedule 15.05.2010    source источник
comment
Кажется, ответ ниже сработал для вас. Пожалуйста, установите флажок под количеством голосов за этот ответ; Таким образом, ваш вопрос помечен как «ответ».   -  person tzot    schedule 11.06.2010
comment
Пожалуйста, начните отвечать на вопросы. Это как сказать спасибо.   -  person ThiefMaster    schedule 06.12.2010


Ответы (4)


Похоже, вы сопоставляете что-то с выводом программы или файлом журнала.

В этом случае вы хотите сопоставить достаточно, чтобы быть уверенным, что вы сопоставляете правильные вещи, но не настолько, чтобы, если вывод немного изменится, ваша программа пошла не так.

В этом случае хорошо работают регулярные выражения, например

>>> import re
>>> mystring = "You have 15 new messages and the size is 32000"
>>> match = re.search(r"(\d+).*?messages.*?size.*?(\d+)", mystring)
>>> if not match: print "log line didn't match"
... 
>>> messages, size = map(int, match.groups())
>>> messages
15
>>> size
32000
person Nick Craig-Wood    schedule 15.05.2010

Эта функция делает свое дело:

def giveme(s, words=()):
    lista = s.split()    
    return [lista[item-1] for item in words]   

mystring = "You have 15 new messages and the size is 32000"
position = (3, 10)
print giveme(mystring, position)

it prints -> ['15', '32000']

Альтернатива, указанная Игнасио, очень чистая:

import operator

mystring = "You have 15 new messages and the size is 32000"
position = (2, 9)

lista = mystring.split()
f = operator.itemgetter(*position)
print f(lista)

it prints -> ['15', '32000']

operator.itemgetter() ...

Возвращает вызываемый объект, который извлекает данный элемент(ы) из своего операнда.

После f = itemgetter(2) вызов f(r) возвращает r[2].

После g = itemgetter(2,5,3) вызов g(r) возвращает (r[2], r[5], r[3])

Обратите внимание, что теперь позиции в position должны отсчитываться от 0, чтобы можно было напрямую использовать аргумент *position.

person joaquin    schedule 15.05.2010
comment
@Ignacio: Спасибо, я этого не знал. Это великолепно! - person joaquin; 15.05.2010

Взгляните на str.split().

В качестве альтернативы, если вы ищете определенные вещи, вы можете вместо этого попробовать регулярные выражения; который мог бы справиться даже с изменением слов-наполнителей. Но если все, что вам нужно, это позиция слова в строке, то разделение и вывод определенных элементов результирующего списка будет самым простым.

person Amber    schedule 15.05.2010

Как насчет этого:

import re

tst_str = "You have 15 new messages and the size is 32000"
items = re.findall(r" *\d+ *",tst_str)
for item in items:
    print(item)

Результат:

 15 
 32000
person SIM    schedule 07.11.2017