2012-12-31 17 views
6

La stringa di input è il seguente:Python: come rimuovere solo prima parola da una stringa

line = "Cat Jumped the Bridge" 

uscita dovrebbe essere "saltato il ponte".

ho cercato

s2 = re.match('\W+.*', line).group() 

ma restituisce

Traceback (most recent call last): 
    File "regex.py", line 7, in <module> 
    s2 = re.match('\W+.*', line).group() 
AttributeError: 'NoneType' object has no attribute 'group' 

Quindi a quanto pare la partita non è riuscito.

Grazie per eventuali suggerimenti. Joe

+0

invece di re.match, re.search esegue ciò di cui avevo bisogno. Questo è per spogliare la prima parola di una linea. Nel caso in cui sei curioso, perché devo fare queste cose. Questo è nel contesto dell'utilizzo del modulo cmd e del tentativo di raccogliere argomenti da una linea di comando. Grazie a tutti quelli che hanno risposto. –

risposta

1

può essere più semplice:

line = "Cat Jumped the Bridge" 
s2 = " ".join(line.split()[1:]) 

Utilizzando espressioni regolari:

line = "Cat Jumped the Bridge" 
s2 = re.sub('^\S+\s+', '', line) 
+0

+1 per averlo prima :) – RocketDonkey

1

Se non sono legati ad espressioni regolari, si potrebbe fare qualcosa di simile:

In [1]: line = "Cat Jumped the Bridge" 

In [2]: s2 = ' '.join(line.split()[1:]) 

In [3]: s2 
Out[3]: 'Jumped the Bridge' 

line.split() prende la stringa e la divide in spazi bianchi, restituendo una lista che contiene ns ogni parola come un elementi:

In [4]: line.split() 
Out[4]: ['Cat', 'Jumped', 'the', 'Bridge'] 

Da quella lista, prendiamo il secondo elemento (saltando la prima parola) e tutto quello che segue utilizzando [1:]:

In [5]: line.split()[1:] 
Out[5]: ['Jumped', 'the', 'Bridge'] 

E poi ultimo pezzo si unisce tutto insieme usando join, dove qui si usa il carattere di spazio a 'unirsi' tutte le stringhe nella nostra lista di nuovo in una singola stringa:

In [6]: ' '.join(line.split()[1:]) 
Out[6]: 'Jumped the Bridge' 
+0

Waay complex. Usa i parametri per la divisione! – Moshe

+0

@Moshe Completamente dimenticato di questo - +1 a voi signore :) – RocketDonkey

4

è inoltre possibile utilizzare .partition():

>>> line = "Cat Jumped the Bridge" 
>>> word, space, rest = line.partition(' ') 
>>> word 
'Cat' 
>>> space 
' ' 
>>> rest 
'Jumped the Bridge' 

Per risolvere quello che hai ora, aggiungere un gruppo di cattura e utilizzare \w invece di \W (sono opposti):

>>> re.match(r'(\w+)', line).group() 
'Cat' 
+0

+1, sicuramente così meglio. – RocketDonkey

+0

Blender, grazie per la tua risposta. Apparentemente ho guardato il codice per troppo tempo oggi. Perché avrei dovuto provare s2 = re.search ('\ W +. *', Line) .group(). E questo mi avrebbe dato quello che volevo. Ma ho avuto un re.match invece. Molte grazie. –

10

Python di split ha un secondo parametro opzionale chiamato maxsplit, per specificare la più grande quantità di divisioni:

line = "Cat Jumped the Bridge" 
s2 = line.split(' ', 1)[1] 

Per citare i documenti per r str.split:

Restituisce un elenco di parole nella stringa, utilizzando sep come stringa delimitatore. Se viene dato maxsplit, presso la maggior parte si divide maxsplit sono fatto

Quindi, per spiegare questo codice: str.split(' ', 1) crea una lista con due elementi: il primo elemento è la prima parola (fino a raggiungere uno spazio), e la seconda essendo il resto della stringa.Per estrarre solo il resto della stringa, utilizziamo [1] per indicare il secondo elemento.

Nota: Se si preoccupati di avere più spazi, usare None come primo parametro per str.split, come segue:

line = "Cat Jumped the Bridge" 
s2 = line.split(None, 1)[1] 
1

O .........

words = ["Cat", "Cool", "Foo", "Mate"] 
sentence = "Cat Jumped the Bridge" 

for word in words: 
    if word in sentence: 
     sentence = sentence.replace(word, "", 1) 
     break 

Altrimenti ....

sentence = "Cat Jumped the Bridge" 

sentence = sentence.split(" ") 
sentence.pop(0) 
sentence = " ".join(sentence) 
0
def delete_first_word(p): 
    letter = 0 
    for e in p: 
     if e[0] == " ": 
      return line[letter + 1:] 
     else: 
      letter = letter + 1 
line = "Cat Jumped the Bridge" 
print delete_first_word(line) 
Problemi correlati