Gibt es eine Auflistung oder Bibliothek, die alle Satzzeichen enthält, auf die wir häufig stoßen?
Normalerweise verwende ich string.punctuation
, aber einige Satzzeichen sind nicht enthalten, zum Beispiel:
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
Antworten:
Mit dieser Prüfung könnten Sie es besser machen:
Die Unicode-Kategorien P * gelten speziell für Interpunktion :
Verbinder (Pc), Strich (Pd), Anfangszitat (Pi), Endzitat (Pf), Öffnen (Ps), Schließen (Pe), Sonstiges (Po)
Verwenden Sie ein festgelegtes Verständnis, um die umfassende Sammlung vorzubereiten, die Sie anschließend für schnelle Mitgliedschaftsprüfungen verwenden können:
Der Zuweisungsausdruck erfordert hier Python 3.8+, was älteren Python-Versionen entspricht:
Beachten Sie, dass sich einige der anderen Zeichen
string.punctuation
tatsächlich in der Unicode-Kategorie Symbol befinden . Es ist einfach, diese auch hinzuzufügen, wenn Sie möchten.quelle
$
), Sk (Modifikator, wie^
), Sm (Mathematik, wie+
oder<
) und vielleicht So (andere, wie©
) umfassen.Die von wim gepostete Antwort ist korrekt, wenn Sie überprüfen möchten, ob ein Zeichen ein Interpunktionszeichen ist.
Wenn Sie wirklich eine Liste aller Satzzeichen benötigen, wie aus Ihrem Fragentitel hervorgeht, können Sie Folgendes verwenden:
quelle
Die Antwort von wim ist großartig, wenn Sie Ihren Code ändern können, um eine Funktion zu verwenden.
Wenn Sie jedoch den
in
Operator verwenden müssen (z. B. wenn Sie den Bibliothekscode aufrufen), können Sie die Ententypisierung verwenden:quelle
Das scheint ein hübscher Job für einen regulären Ausdruck (regulärer Ausdruck) zu sein:
Hier stimmt der reguläre Ausdruck mit allen außer Leerzeichen oder Wortzeichen überein. Das Flag
re.UNICODE
wird verwendet, um den gesamten Satz von Unicode-Zeichen abzugleichen.quelle
>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
\xc3
Flucht ist eine Repräsentationssache, die nichts mit dem Entfernen der Interpunktion zu tun hat).\xc3
ist nicht die richtige Unicode-Codierung vonæ
; Wenn Sie eingebenstr(text)
, können Sie bestätigen, dass dies der Fall ist\xc3\xa6
. Eigentlich\xc3
scheint es kein vollständiger Codepunkt zu sein.str
es sich um eine Byte-Zeichenfolge handelt. Sie sollten auf jeden Fall zu Python 3 wechseln, da Unicode in Py2 ein Albtraum ist.str('æ')
Zeigt für mich als'æ'
undascii('æ')
zeigt als'\xe6'
, welches der richtige Codepunkt ist.b'\xc3\xa6'
ist die UTF-8-Codierung von'æ'
, aber normalerweise möchten Sie damit nicht arbeiten.Wie andere Antworten gezeigt haben, erfolgt dies über Unicode-Eigenschaften / Kategorien. Die akzeptierte Antwort greift über das Standardbibliotheksmodul auf diese Informationen zu.
unicodedata
Abhängig vom Kontext, in dem Sie dies benötigen, ist es möglicherweise schneller oder bequemer, mit regulären Ausdrücken auf dieselben Eigenschaftsinformationen zuzugreifen.Allerdings ist das Standard - Bibliothek -
re
Modul bietet keine Unicode - Unterstützung erweitert. Dazu benötigen Sie das auf PyPI ( ) verfügbareregex
Modulpip install regex
:Eine gute Übersicht über die verschiedenen Arten von Unicode - Eigenschaften , die Sie für die Verwendung von regulären Ausdrücken suchen ist vorgesehen , hier . Abgesehen von diesen zusätzlichen Funktionen für reguläre Ausdrücke, die auf der PyPI-Homepage dokumentiert sind, wird
regex
absichtlich dieselbe API wie bereitgestellt. Esre
wird daher erwartet, dass Sie diere
Dokumentation verwenden, um herauszufinden, wie eine der beiden Funktionen verwendet wird.quelle