Apakah ada daftar atau pustaka yang memiliki semua tanda baca yang biasa kita temui?
Biasanya saya gunakan string.punctuation
, tetapi beberapa karakter tanda baca tidak termasuk di dalamnya, misalnya:
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
Jawaban:
Anda mungkin lebih baik dengan cek ini:
Kategori Unicode P * khusus untuk Tanda baca :
konektor (Pc), tanda hubung (Pd), kutipan awal (Pi), kutipan akhir (Pf), buka (Ps), tutup (Pe), lainnya (Po)
Untuk menyiapkan koleksi lengkap, yang selanjutnya dapat Anda gunakan untuk cek keanggotaan cepat, gunakan pemahaman set:
Ekspresi penugasan di sini membutuhkan Python 3.8+, setara dengan versi Python yang lebih lama:
Berhati-hatilah karena beberapa karakter lain ada di
string.punctuation
dalam simbol Unicode kategori . Sangat mudah untuk menambahkan mereka juga jika Anda mau.sumber
$
), Sk (pengubah, suka^
), Sm (matematika, suka+
atau<
), dan mungkin So (lainnya, suka©
).Jawaban yang diposting oleh wim benar jika Anda ingin memeriksa apakah suatu karakter adalah karakter tanda baca.
Jika Anda benar-benar membutuhkan daftar semua karakter tanda baca seperti yang disarankan judul pertanyaan Anda, Anda dapat menggunakan yang berikut:
sumber
Jawaban oleh wim sangat bagus jika Anda dapat mengubah kode Anda untuk menggunakan suatu fungsi.
Tetapi jika Anda harus menggunakan
in
operator (misalnya, Anda memanggil kode perpustakaan), Anda dapat menggunakan mengetik bebek:sumber
Itu sepertinya pekerjaan yang bagus untuk ekspresi reguler (regexp):
Di sini, regexp mencocokkan semuanya kecuali spasi putih atau karakter kata. Bendera
re.UNICODE
digunakan untuk mencocokkan set lengkap karakter Unicode.sumber
>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
\xc3
pelarian adalah hal representasi yang tidak terkait dengan pengupasan tanda baca).\xc3
bukan penyandian Unicode yang benaræ
; jika Anda mengetik,str(text)
Anda dapat mengonfirmasi bahwa itu benar\xc3\xa6
. Sebenarnya\xc3
sepertinya bukan codepoint yang lengkap.str
string byte. Anda pasti harus beralih ke Python 3, karena Unicode adalah mimpi buruk di Py2. Bagi saya,str('æ')
menunjukkan sebagai'æ'
, danascii('æ')
menunjukkan sebagai'\xe6'
, yang merupakan titik kode yang benar.b'\xc3\xa6'
adalah pengkodean UTF-8'æ'
, tetapi ini biasanya tidak sesuai dengan keinginan Anda.Seperti yang ditunjukkan oleh jawaban lain, cara untuk melakukannya adalah melalui properti / kategori Unicode. Jawaban yang diterima mengakses informasi ini melalui
unicodedata
modul perpustakaan standar , tetapi tergantung pada konteks di mana Anda membutuhkan ini, mungkin lebih cepat atau lebih nyaman untuk mengakses informasi properti yang sama ini menggunakan ekspresi reguler.Namun,
re
modul perpustakaan standar tidak menyediakan dukungan Unicode yang diperluas. Untuk itu, Anda memerlukanregex
modul , tersedia di PyPI (pip install regex
):Tinjauan umum yang baik dari semua jenis properti Unicode yang dapat Anda cari menggunakan ekspresi reguler disediakan di sini . Terlepas dari fitur ekspresi ekstra reguler ini, yang didokumentasikan pada beranda PyPI,
regex
sengaja menyediakan API yang samare
, sehingga Anda diharapkan untuk menggunakanre
dokumentasi untuk mengetahui cara menggunakan keduanya.sumber