So möchte ich Gruppe von Satzzeichen aus dem Text mit Leerzeichen trennen.Python, wie Interpunktion von Text zu trennen
my_text = "!where??and!!or$$then:)"
Ich möchte ein ! where ?? and !! or $$ then :)
als Ergebnis haben.
Ich wollte etwas wie in Javascript, wo Sie $1
verwenden können, um Ihre passende Zeichenfolge zu erhalten. Was ich bisher versucht haben:
my_matches = re.findall('[!"\$%&\'()*+,\-.\/:;=#@?\[\\\]^_`{|}~]*', my_text)
my_matches Hier ist leer, also musste ich \\\
aus dem Ausdruck löschen:
my_matches = re.findall('[!"\$%&\'()*+,\-.\/:;=#@?\^_`{|}~]*', my_text)
Ich habe dieses Ergebnis:
['!', '', '', '', '', '', '??', '', '', '', '!!', '', '', '$$', '', '', '', '',
':)', '']
Also ich löschen Alle redundanten Eintrag wie folgt:
my_matches_distinct = list(set(my_matches))
Und ich habe ein besseres Ergebnis:
['', '??', ':)', '$$', '!', '!!']
Dann ersetze ich jedes Spiel von ihm selbst und Raum:
for match in my_matches:
if match != '':
my_text = re.sub(match, ' ' + match + ' ', my_text)
Und natürlich arbeitet es nicht! Ich habe versucht, das Match als String zu interpretieren, aber es funktioniert auch nicht ... Wenn ich versuche, den String direkt zu setzen, funktioniert es zwar.
Aber ich denke, ich mache es nicht richtig, weil ich Probleme mit '!' und '!!' Recht?
Thanks :)
Es wird empfohlen, rohe Stringliterale zu verwenden, wenn ein RegexMuster definieren. Außerdem sollten Sie keine willkürlichen Symbole in einer Zeichenklasse entkommen lassen, nur "' '' 'muss immer maskiert werden und andere können so platziert werden, dass sie nicht maskiert werden müssen. Außerdem entspricht Ihre Regex einer leeren Zeichenkette - und tut es auch - aufgrund von '*'. Ersetzen durch '+' Quantifizierer. –
Wenn Sie diese Symbole aus Ihrer Zeichenfolge entfernen möchten, warum verwenden Sie 're.findall' überhaupt? –
Weil ich vor und nach diesen Symbolgruppen Platz machen will und ich weiß nicht, wie ich das speichern soll? – MlleStrife