2012-12-31 28 views
6

Die Eingabezeichenfolge ist unten angegeben:Python: wie nur erstes Wort aus einer Zeichenfolge entfernen

line = "Cat Jumped the Bridge" 

Output soll "Sprang the Bridge" sein.

Ich versuchte

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

Aber es gibt

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' 

So offensichtlich das Spiel gescheitert.

Vielen Dank für Anregungen. Joe

+0

statt re.match re.search macht was ich brauche. Das heißt, das erste Wort einer Zeile zu entfernen. Wenn Sie neugierig sind, warum muss ich solche Dinge tun. Dies ist im Zusammenhang mit der Verwendung von Cmd-Modul und versuchen, Argumente aus einer Befehlszeile zu sammeln. Danke an alle die geantwortet haben. –

Antwort

1

kann einfacher sein:

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

regex:

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

+1 für die ersten :) – RocketDonkey

1

Wenn Sie nicht zu den regulären Ausdruck gebunden sind, können Sie so etwas tun könnte:

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

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

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

line.split() nimmt die Zeichenfolge und teilt sie in Whitespace auf und gibt eine Liste zurück, die contai enthält ns jedes Wort als Objekte:

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

Aus dieser Liste, nehmen wir das zweite Element (Überspringen des erste Wort) und alles, nachdem es durch den Einsatz [1:]:

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

Und dann letztes Stück beitritt sie alle zusammen join verwenden, wo wir hier das Leerzeichen verwenden ‚nachziehen‘ alle Saiten in unserer Liste wieder in einen einzigen String:

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

Waay Komplex. Benutze Parameter für Split! – Moshe

+0

@Moshe Total vergessen - +1 zu Ihnen Herr :) – RocketDonkey

4

Sie auch verwenden können .partition():

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

Um dies zu beheben, was Sie jetzt haben, eine Erfassungsgruppe hinzufügen und \w statt \W (sie sind Gegensätze):

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

+1, auf jeden Fall besser so. – RocketDonkey

+0

Blender, danke für deine Antwort. Anscheinend hatte ich den Code heute zu lange angeschaut. Denn ich hätte s2 = re.search ('\ W +. *', Line) .group() ausprobieren sollen. Und das hätte mir gegeben, was ich wollte. Aber ich hatte stattdessen ein re.match. Danke vielmals. –

10

Pythons split hat einen optionalen zweiten Parameter namens maxsplit, um die größte Menge an Aufteilungen zu spezifizieren:

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

Um die Dokumente für die zo r str.split:

Gibt eine Liste der Wörter in der Zeichenfolge zurück, wobei sep als Trennzeichenfolge verwendet wird. Wenn maxsplit gegeben ist, höchstens maxsplit Splits

getan

So diesen Code zu erklären: str.split(' ', 1) eine Liste mit zwei Elementen erzeugt: das erste Element das erste Wort zu sein (bis erreicht er einen Raum) und die zweite den Rest der Zeichenfolge zu sein.Um nur den Rest der Zeichenfolge zu extrahieren, verwenden wir [1], um das zweite Element anzugeben.

Hinweis: Wenn Sie mit mehreren Räumen betroffen sind, verwenden None als ersten Parameter für str.split wie folgt:

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

Oder .........

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

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

Ansonsten ....

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) 
Verwandte Themen