2017-04-06 2 views
0

Ich habe einen regulären Ausdruck, der die Worte zurück (ausgenommen @mentions enthält Hashtags aber entfernt die Raute #)Regex, die Hashtags mit Hash-Zeichen gibt, schließt jedoch @ erwähnt

import re 
pattern=r'(?u)(?<![@])\b\w\w+\b' 
pattern=re.compile(pattern) 
pattern.findall('this is a tweet #hashtag @mention') 

Das gibt

['this', 'is', 'tweet', 'hashtag'] 

Was ich brauche, ist eine Modifikation dieses regex, die die Hash-Zeichen mit Hashtag kehrt so sollte es zurück:

['this', 'is', 'tweet', '#hashtag'] 

Beachten Sie, dass meine Frage anders ist als die Rückgabe von @mentions und #hashtags. Ich möchte sowohl reguläre Wörter als auch Hashtags, aber ich möchte keine @entions.

+0

Mögliche Duplikat (http://stackoverflow.com/questions/1994615/how -to-use-python-regex-zu-match-words-beginning-with-hash-and-question-mark) –

+0

Wie gebunden an die Verwendung von Regex bist du? Sie sollten in der Lage sein, das zu tun, was Sie erreichen wollen, indem Sie nur die nativen String-Methoden von Python verwenden. – James

+0

Ich muss Regex verwenden, weil ich es dem TFIDFVectorizer von sklearn gebe. – Ash

Antwort

1

Hinzufügen von '#?' Durch das Muster werden Wörter gefunden, die mit 0 oder 1 Hash-Symbolen beginnen.

import re 
pattern=r'(?u)(?<![@])#?\b\w\w+\b' 
pattern=re.compile(pattern) 
results = pattern.findall('this is a tweet #hashtag @mention') 
print(results) 

in Resultierende: [? Wie Python Regex verwenden Wörter mit Hash-und Fragezeichen beginnen zu entsprechen]

['this', 'is', 'tweet', '#hashtag'] 
Verwandte Themen