¿Hay una lista o biblioteca que tenga todos los signos de puntuación que comúnmente podríamos encontrar?
Normalmente lo uso string.punctuation
, pero algunos caracteres de puntuación no están incluidos, por ejemplo:
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
Respuestas:
Podrías hacerlo mejor con esta verificación:
Las categorías Unicode P * son específicamente para puntuación :
conector (Pc), guión (Pd), comilla inicial (Pi), comilla final (Pf), abrir (Ps), cerrar (Pe), otro (Po)
Para preparar la colección exhaustiva, que luego puede usar para verificaciones de membresía rápidas, use una comprensión establecida:
La expresión de asignación aquí requiere Python 3.8+, equivalente para versiones anteriores de Python:
Tenga en cuenta que algunos de los otros caracteres en
string.punctuation
realidad están en la categoría Unicode Símbolo . Es fácil agregarlos también si lo desea.fuente
$
), Sk (modificador, me gusta^
), Sm (matemáticas, me gusta+
o<
), y tal vez So (otra, me gusta©
).La respuesta publicada por wim es correcta si desea verificar si un carácter es un signo de puntuación.
Si realmente necesita una lista de todos los caracteres de puntuación como sugiere el título de su pregunta, puede usar lo siguiente:
fuente
La respuesta de wim es excelente si puede cambiar su código para usar una función.
Pero si tiene que usar el
in
operador (por ejemplo, está llamando al código de la biblioteca), puede usar la escritura de pato:fuente
Parece un buen trabajo para una expresión regular (regexp):
Aquí, la expresión regular combina todo excepto espacios en blanco o caracteres de palabras. La bandera
re.UNICODE
se utiliza para hacer coincidir el conjunto completo de caracteres Unicode.fuente
>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
\xc3
escape es una cosa de representación no relacionada con la eliminación de la puntuación).\xc3
no es la codificación Unicode correcta deæ
; si escribestr(text)
puede confirmar que es así\xc3\xa6
. En realidad\xc3
no parece ser un punto de código completo.str
hay una cadena de bytes. Definitivamente deberías cambiar a Python 3, porque Unicode es una pesadilla en Py2. Para mí,str('æ')
muestra como'æ'
yascii('æ')
muestra como'\xe6'
, que es el punto de código correcto.b'\xc3\xa6'
es la codificación UTF-8 de'æ'
, pero esto no suele ser con lo que desea trabajar.Como han señalado otras respuestas, la forma de hacerlo es a través de las propiedades / categorías de Unicode. La respuesta aceptada accede a esta información a través del
unicodedata
módulo de biblioteca estándar , pero dependiendo del contexto donde lo necesite, podría ser más rápido o más conveniente acceder a esta misma información de propiedad utilizando expresiones regulares.Sin embargo, el
re
módulo de biblioteca estándar no proporciona soporte extendido Unicode. Para eso, necesita elregex
módulo , disponible en PyPI (pip install regex
):Aquí se proporciona una buena descripción general de todos los diferentes tipos de propiedades Unicode que puede buscar utilizando expresiones regulares . Además de estas características adicionales de expresión regular, que están documentadas en su página de inicio de PyPI,
regex
proporciona deliberadamente la misma API quere
, por lo que se espera que usere
la documentación para descubrir cómo usarlas.fuente