web-dev-qa-db-ja.com

Python(ASCIIだけではない)の句読点の完全なセット

私たちがよく遭遇する可能性があるすべての句読点があるリストまたはライブラリはありますか?

通常はstring.punctuationを使用しますが、一部の句読文字は含まれていません。次に例を示します。

>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
41
samuelbrody1249

wimによる回答 は、関数を使用するようにコードを変更できる場合に最適です。

ただし、in演算子を使用する必要がある場合(たとえば、ライブラリコードを呼び出す場合)、ダックタイピングを使用できます。

import unicodedata
class DuckType:
    def __contains__(self,s):
        return unicodedata.category(s).startswith("P")
punct=DuckType()
#print("'" in punct,'"' in punct,"a" in punct)
2
xkcdjerry

それは正規表現(regexp)のかなりの仕事のようです:

    import re
    text = re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE)

ここで、正規表現は、空白またはWord文字以外のすべてに一致します。フラグre.UNICODEは、Unicode文字の完全なセットを照合するために使用されます。

1

他の回答が指摘しているように、これを行う方法は、Unicodeプロパティ/カテゴリを使用することです。 承認された回答 は、標準ライブラリunicodedataモジュールを介してこの情報にアクセスしますが、これが必要なコンテキストによっては、通常の方法で同じプロパティ情報にアクセスする方が高速または便利な場合があります式。

ただし、標準ライブラリ re module は拡張Unicodeサポートを提供しません。そのためには、PyPIで利用可能な regex module が必要です(pip install regex):

>>> import regex as re
>>> re.match("\p{Punctuation}", "'")
<regex.Match object; span=(0, 1), match="'">
>>> re.match("\p{Punctuation}", "’")
<regex.Match object; span=(0, 1), match='’'>

正規表現を使用して検索できるすべての異なる種類のUnicodeプロパティの概要は、 here で提供されています。 PyPIホームページに記載されているこれらの追加の正規表現機能とは別に、regexreと同じAPIを意図的に提供しているため、reのドキュメントを使用してそれらのどちらかを使用する方法を理解してください。

0
dlukes