2016-03-25 18 views
1

Ich bin relativ neu bei Python. Angenommen, ich habe die folgende Zeichenfolge -Löschen unbestimmter Teilzeichenfolgen

tweet1= 'Check this out!! #ThrowbackTuesday I finally found this!!' 
tweet2= 'Man the summer is hot... #RisingSun #SummerIsHere Can't take it..' 

Jetzt versuche ich, alle Hashtags zu löschen (#) innerhalb der Tweets, so dass -

tweet1= 'Check this out!! I finally found this!!' 
tweet2= 'Man the summer is hot... Can't take it..' 

Mein Code war -

tweet1= 'Check this out!! #ThrowbackTuesday I finally found this!!' 
i,j=0,0 
s=tweet1 
while i < len(tweet1): 
    if tweet1[i]=='#': 
     j=i 
     while tweet1[j] != ' ': 
      ++j 
     while i<len(tweet1) and j<len(tweet1): 
      ++j 
      s[i]=tweet1[j] 
      ++i 
    ++i 
print(s) 

Dieser Code gibt mir keine Ausgabe und keine Fehler, die mich glauben machen, dass ich die falsche Logik verwende. Gibt es eine einfachere Lösung mit Regex?

+0

'++ i' macht nichts. Die Tatsache, dass es gültige Syntax ist, ist ein Zufall. Du musst sagen "i + = 1". –

+0

Werfen Sie einen Blick auf [Warum gibt es keine ++ und - Operatoren in Python?] (Http://stackoverflow.com/q/3654830) –

Antwort

3

hier eine Lösung regex ist:

re.sub(r'#\w+ ?', '', tweet1) 

Die regex bedeutet ein Hash-Symbol, gefolgt von 1 löschen oder mehrere Wortzeichen (Buchstaben, Zahlen oder Unterstriche), optional gefolgt von einem Leerzeichen (damit Sie in einem nicht zwei Leerzeichen erhalten) Reihe).

Sie können viel über Regexes im Allgemeinen herausfinden und in Python mit Google, es ist nicht schwer.

Zusätzlich ermöglichen, zusätzliche Sonderzeichen, wie $ und @, ersetzen \w mit [\[email protected]], wo die [email protected] kann mit dem, was Zeichen ersetzt werden Sie so wollen, das heißt alles, was in den Klammern erlaubt.

+0

Hinzufügen dieses hier als eine Referenz, weil es eine großartige Website ist: http://regex101.com – idjaw

+0

Persönlich war dies mehr der Lösung, die ich suchte.Thanks Alex. Gibt es eine Möglichkeit, den Fall zu berücksichtigen, in dem dem Hash-Zeichen auch Sonderzeichen folgen? ZB 'asdasdas # $% @ asdasdasd' –

+1

Gern geschehen! Ich habe die Antwort für zusätzliche Zeichen bearbeitet. –

0

Python hat keine ++ Betreiber so ++j gilt nur die + Betreiber j zweimal was natürlich nichts tut. Sie sollten stattdessen j += 1 verwenden.

+0

Vielen Dank für das darauf hin. Gibt es einen Grund, warum der Inkrement-Operator in Python nicht verfügbar ist? Ich habe mit C++ und Java programmiert und beide verwenden den Inkrement-Operator. –

+0

@IceFrog http://StackOverflow.com/Questions/3654830/Why-are-there-No-and-Operators-in-Python – wRAR

3

Sie können split und startswith verwenden, um Ihre Aufgabe zu erfüllen.

Hier split wird Ihre tweet Zeichenfolge eine Liste von Wörtern durch Leerzeichen getrennt. Wenn Sie dann in einem Verständnis eine neue Liste erstellen, lassen Sie einfach alles weg, was mit beginnt, indem Sie startswith verwenden. Dann wird ' '.join einfach eine Zeichenkette machen, die wiederum durch Leerzeichen getrennt ist.

kann der Code geschrieben werden als

Output:

Check this out!! I finally found this!! 
+0

Ich würde verwenden, wenn w [0]! = '#', Können Sie erlauben # in der Mitte der Wörter. – SurDin

+0

Oder 'wenn nicht mit Startswith ('#')' – zezollo

+0

Danke Jungs. Ich dachte, wenn Tweets '#' in der Mitte zulassen. Ich wollte Twitter überprüfen. Danke für die Köpfe hoch. :) – idjaw

Verwandte Themen