Вывести одно слово из строки в Python - PullRequest
4 голосов
/ 15 мая 2010

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

в то время как длина текста может отличаться каждый раз

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

спасибо.

Ответы [ 6 ]

8 голосов
/ 15 мая 2010
mystring = "You have 15 new messages and the size is 32000"
parts = mystring.split(' ')
message_count = int(parts[2])
message_size = int(parts[9])
4 голосов
/ 16 мая 2010

mystring = "У вас 15 новых сообщений и размер 32000 "

print mystring.split ("") [2] #prints 3-е слово

print mystring.split ("") [9] #prints 10 слово

4 голосов
/ 15 мая 2010

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

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

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

>>> 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
2 голосов
/ 15 мая 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

0 голосов
/ 07 ноября 2017

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

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
0 голосов
/ 15 мая 2010

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

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

...