2010-05-15 5 views
3

Comment puis-je imprimer uniquement certains mots d'une chaîne en python? permet de dire que je veux imprimer seulement le 3ème mot (qui est un numéro) et le 10 unImprimer un mot d'une chaîne en python

tandis que la longueur du texte peut être différent à chaque fois

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

merci.

+1

Il semble qu'une réponse ci-dessous travaillé pour vous. Veuillez cocher la case ci-dessous le nombre de votes de cette réponse; De cette façon, votre question est marquée comme "répondue". – tzot

+0

Veuillez commencer à répondre aux questions. C'est comme dire "merci". – ThiefMaster

Répondre

0

Jetez un oeil à str.split(). Alternativement, si vous cherchez certaines choses, vous pouvez essayer des expressions régulières à la place; cela pourrait faire face aux mots de remplissage changeant, même. Mais si tout ce qui vous intéresse est la position du mot dans la chaîne, alors diviser et imprimer certains éléments de la liste résultante serait le plus simple.

7
mystring = "You have 15 new messages and the size is 32000" 
parts = mystring.split(' ') 
message_count = int(parts[2]) 
message_size = int(parts[9]) 
+1

'split()' se sépare déjà sur les espaces (les espaces en général) par défaut ... –

+0

Merci! thats fait le travail – Shai

2

Cette fonction fait le tour:

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'] 

L'alternative indiquée par Ignacio est très propre:

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() ...

Renvoie un objet pouvant être appelé qui récupère le (s) élément (s) donné (s) de son opérande. Après f = itemgetter(2), l'appel f(r) renvoie r [2].

Après, g = itemgetter(2,5,3), l'appel g(r) renvoie (r [2], r [5], r [3])

Notez que les positions maintenant la position doit être compté de 0 pour permettre en utilisant directement l'argument de position *

+1

'operator.itemgetter()' –

+0

@Ignacio: Merci, je ne savais pas cela. C'est bien! – joaquin

4

Il semble que vous soyez en train de faire correspondre quelque chose avec la sortie du programme ou un fichier journal.

Dans ce cas, vous voulez faire correspondre assez de sorte que vous avez confiance que vous faites correspondre la bonne chose, mais pas tellement que si la sortie change un peu votre programme va mal.

Les expressions régulières fonctionnent bien dans ce cas, par exemple

>>> 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 
4

mystring = "Vous avez 15 nouveaux messages et la taille est 32000"

impression mystring.split (» «) [ 2] #prints le 3ème mot

impression mystring.split (» «) [9] #prints le 10 mot

0

Que diriez-vous celui-ci:

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) 

Résultat:

15 
32000