2017-02-12 3 views
1

Ich habe eine Zeichenfolge, die ich in eine Liste bestimmter Typen aufteilen möchte. Zum Beispiel möchte ich splitten Starter Main Course Dessert zu [Starter, Main Course, Dessert]Teilen von Zeichenfolgen in Python, aber mit Leerzeichen in Teilzeichenfolgen

Ich kann split() nicht verwenden, weil es den Main Course Typ aufteilen wird. Wie kann ich das Teilen machen? Wird Regex benötigt?

+0

Sie würden entweder die Wörter oder Wortteile wissen haben, oder das Layout, um dies zu tun .. – TheLazyScripter

+0

Was 'Haupt Course' passt aber nicht' Starter Main' oder 'Kurs Dessert' (von' Starter Hauptgericht Dessert')? Das ist unmöglich, AFAIK. – Dev

+0

Ja, ich kenne die Wörter, in die ich teilen möchte, aber ich bin nicht sicher, wie man es von der ursprünglichen Zeichenkette –

Antwort

3

Wenn Sie eine Liste akzeptabler Wörter haben, könnten Sie eine regex Vereinigung verwenden:

import re 

acceptable_words = ['Starter', 'Main Course', 'Dessert', 'Coffee', 'Aperitif'] 
pattern = re.compile("("+"|".join(acceptable_words)+")", re.IGNORECASE) 
# "(Starter|Main Course|Dessert|Coffee|Aperitif)" 

menu = "Starter Main Course NotInTheList dessert" 
print pattern.findall(menu) 
# ['Starter', 'Main Course', 'dessert'] 

Wenn Sie wollen einfach nur angeben, welche speziellen Teil abgestimmt werden sollte, könnten Sie verwenden:

acceptable_words = ['Main Course', '\w+'] 
0

Ich denke, es ist praktischer, nur 'spezielle' Zwei-Wörter-Tokens anzugeben.

special_words = ['Main Course', 'Something Special'] 
sentence = 'Starter Main Course Dessert Something Special Date' 

words = sentence.split(' ') 
for i in range(len(words) - 1): 
    try: 
     idx = special_words.index(str(words[i]) + ' ' + words[i+1]) 
     words[i] = special_words[idx] 
     words[i+1] = None 
    except ValueError: 
     pass 

words = list(filter(lambda x: x is not None, words)) 
print(words) 
Verwandte Themen