Ich habe einen String text
und eine Liste names
- Ich möchte
text
jedes Mal teilen, wenn ein Element vonnames
auftritt. - Ich möchte, dass die Reihenfolge der Trennzeichen irrelevant
names
ist, da diese mehrmals vorkommen könnentext
- Ich möchte eine Liste von Listen erstellen, in der jedes Split
text
-Slice dem Trennzeichen entspricht, durch das es geteilt wurde.
Beispiel:
text = 'Monika goes shopping. Then she rides the bike. Mike likes Pizza. Monika hates me.'
names = ['Mike', 'Monika']
gewünschte Ausgabe: (Reihenfolge der Listen ist nicht wichtig)
output = [['Monika', ' goes shopping. Then she rides the bike.'], ['Mike', ' likes Pizza.'], ['Monika', ' hates me.']]
Hilfe:
Ich denke, jemand hatte hier bereits ein ähnliches Problem: https://stackoverflow.com/a/4697047/14648054
def split(txt, seps):
default_sep = seps[0]
for sep in seps[1:]: # skip seps[0] as the default separator
txt = txt.replace(sep, default_sep)
return [i.strip() for i in txt.split(default_sep)]
und hier: https://stackoverflow.com/a/2911664/14648054
def my_split(s, seps):
res = [s]
for sep in seps:
s, res = res, []
for seq in s:
res += seq.split(sep)
return res
print my_split('1111 2222 3333;4444,5555;6666', [' ', ';', ','])
['1111', '', '2222', '3333', '4444', '5555', '6666']
re.split()
lässt mich keine Liste als Trennargument verwenden. Kann ich re.compile()
meine Trennzeichen irgendwie auflisten?
Lösung des Problems
Ihr Beispiel entspricht nicht vollständig Ihrer gewünschten Ausgabe. Außerdem ist nicht klar, ob die Beispieleingabe immer diese Struktur haben wird, z. B. mit dem Punkt am Ende jedes Satzes.
Trotzdem möchten Sie vielleicht diesen schmutzigen Ansatz ausprobieren:
import re
text = 'Monika will go shopping. Mike likes Pizza. Monika hates me.'
names = ['Ruth', 'Mike', 'Monika']
rsplit = re.compile("|".join(sorted(names))).split
output = []
sentences = text.split(".")
for name in names:
for sentence in sentences:
if name in sentence:
output.append([name, f"{rsplit(sentence)[-1]}."])
print(output)
Dies gibt aus:
[['Mike', ' likes Pizza.'], ['Monika', ' will go shopping.'], ['Monika', ' hates me.']]
Keine Kommentare:
Kommentar veröffentlichen