einfachste Lösung, die Raumfilter und Sonderzeichen:
filter(None,re.split(r'\W|\d', bleh))
Die Regex
Der reguläre Ausdruck '\ W' bedeutet im Grunde, 'fängt' irgendein Nicht-Wort-Zeichen, und \ d bedeutet, dass Sie Zahlenzeichen fangen wollen. Also, wenn Sie ein Wort wie:
Banane "* # 12312 Zucker
Es wird die komplette Nicht-Wort-Zeichen fangen:
" * # 12312
Die Regex-Funktion Split
Dieser Code:
re.split(r'\W|\d', bleh)
ist ähnlich zu spalten, dass Sie verwendet, außer es ist cool, weil es regex-driven ist, die Sie einige erstaunliche Fähigkeiten gibt.
Filterfunktion
filtert Buchstäblich die Liste aus dem, was Sie nicht wollen. Also, in diesem Code, wo foo eine Liste, wo foo = [ "A", "B", "", "D"]:
filter(None,foo)
Es besteht im Wesentlichen in der Liste sieht und finden Sie Instanzen von ' None ', und pop/entfernen Sie es aus der Liste.
Voll Code:
import re
bleh = """"car */12314 34234 /*one 123123lemon grass
food accelerate
"""
print filter(None,re.split(r'\W|\d', bleh))
Ergebnis:
['car', 'one', 'lemon', 'grass', 'food', 'accelerate']
mit Ihrem Code
import re
def readWords(x,y):
with open(x,'r') as f:
for line in f:
//Append to y
y += filter(None,re.split(r'\W|\d', line))
firstFile = sys.argv[1]
firstList = []
readWords(firstFile, firstList)
Regex würde hier am besten. Sie können die Bedingung '\ s' verwenden, um Sonderzeichen zu erfassen. – Adib
@Adib '\ s' erfasst Leerzeichen. –
@Scherf Welche Zeichen sind speziell für dich? –