Czy istnieje lista lub biblioteka zawierająca wszystkie znaki interpunkcyjne, z którymi często się spotykamy?
Zwykle używam string.punctuation
, ale niektóre znaki interpunkcyjne nie są w nim zawarte, na przykład:
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
Odpowiedzi:
Przydałaby Ci się ta kontrola:
Kategorie Unicode P * dotyczą specjalnie interpunkcji :
złącze (Pc), myślnik (Pd), wstępny cytat (Pi), końcowy cytat (Pf), otwórz (Ps), zamknij (Pe), inny (Po)
Aby przygotować wyczerpującą kolekcję, którą możesz następnie wykorzystać do szybkiej kontroli członkostwa, użyj zestawu:
Wyrażenie przypisania tutaj wymaga Python 3.8+, odpowiednik dla starszych wersji Python:
Uważaj, że niektóre inne znaki w
string.punctuation
rzeczywistości znajdują się w symbolu kategorii Unicode . Możesz je łatwo dodać, jeśli chcesz.źródło
$
), Sk (modyfikator, jak^
), Sm (matematyka, jak+
lub<
), a może So (inne, jak©
).Odpowiedź wysłana przez wim jest poprawna, jeśli chcesz sprawdzić, czy znak jest znakiem interpunkcyjnym.
Jeśli naprawdę potrzebujesz listy wszystkich znaków interpunkcyjnych, jak sugeruje tytuł pytania, możesz użyć następujących opcji:
źródło
Odpowiedź wim jest świetna, jeśli możesz zmienić kod, aby użyć funkcji.
Ale jeśli musisz użyć
in
operatora (na przykład dzwonisz do kodu biblioteki), możesz użyć wpisywania kaczki:źródło
To wygląda na niezłą robotę dla wyrażenia regularnego (regexp):
Wyrażenie regularne dopasowuje tutaj wszystko oprócz białych znaków i znaków słownych. Flaga
re.UNICODE
służy do dopasowania pełnego zestawu znaków Unicode.źródło
>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
\xc3
ucieczka jest rzeczą związaną z usuwaniem interpunkcji).\xc3
nie jest poprawnym kodowaniem Unicodeæ
; jeśli wpiszeszstr(text)
, możesz potwierdzić, że tak jest\xc3\xa6
. W rzeczywistości\xc3
nie wydaje się być kompletnym punktem kodowym.str
jest ciąg bajtów. Zdecydowanie powinieneś przejść na Python 3, ponieważ Unicode to koszmar w Py2. Dla mniestr('æ')
pokazuje jako'æ'
iascii('æ')
pokazuje jako'\xe6'
, który jest poprawnym punktem kodowym.b'\xc3\xa6'
jest kodowaniem UTF-8'æ'
, ale zwykle nie jest to z czym chcesz pracować.Jak wskazały inne odpowiedzi, sposobem na to jest skorzystanie z właściwości / kategorii Unicode. Zaakceptowana odpowiedź uzyskuje dostęp do tych informacji za pośrednictwem standardowego
unicodedata
modułu biblioteki , ale w zależności od kontekstu, w którym jest to potrzebne, może być szybszy lub wygodniejszy dostęp do tej samej informacji o właściwości za pomocą wyrażeń regularnych.Jednak standardowy
re
moduł biblioteczny nie zapewnia rozszerzonej obsługi Unicode. Do tego potrzebny jestregex
moduł dostępny w PyPI (pip install regex
):Warunkiem jest dobry przegląd wszystkich różnych rodzajów właściwości Unicode można wyszukiwać za pomocą wyrażeń regularnych tutaj . Oprócz tych dodatkowych funkcji wyrażeń regularnych, które są udokumentowane na stronie głównej PyPI,
regex
celowo udostępnia ten sam interfejs API core
, więc należy się spodziewać pore
dokumentacji, aby dowiedzieć się, jak korzystać z którejkolwiek z nich.źródło