Saltar al contenido

Python regex para palabras en mayúsculas unicode

Virginia, parte de nuestro staff, nos ha hecho el favor de crear este post ya que controla a la perfección este tema.

Solución:

Si necesita usar una expresión regular, tiene 2 opciones:

  • Instalar PyPi regex módulo y uso pLu o [[:upper:]] (que tiene más caracteres en mayúsculas) clase (asegúrese de tener instalada la última versión)
  • Usar re con una clase de caracteres que contiene todos los rangos de letras mayúsculas, ya sea usando las utilidades de Python (y luego la cantidad de letras Unicode que coincidan dependerá de la versión de Python, la última tiene datos actualizados) o creando / actualizando manualmente el rango de los Utilidades Unicode CLDR página.

Aquí hay una solución con una expresión regular que contiene todos los rangos de letras mayúsculas tomados de la página de referencia CLDR de Unicode Utilities:

import re
pLu = "[A-Zu00C0-u00D6u00D8-u00DEu0100u0102u0104u0106u0108u010Au010Cu010Eu0110u0112u0114u0116u0118u011Au011Cu011Eu0120u0122u0124u0126u0128u012Au012Cu012Eu0130u0132u0134u0136u0139u013Bu013Du013Fu0141u0143u0145u0147u014Au014Cu014Eu0150u0152u0154u0156u0158u015Au015Cu015Eu0160u0162u0164u0166u0168u016Au016Cu016Eu0170u0172u0174u0176u0178u0179u017Bu017Du0181u0182u0184u0186u0187u0189-u018Bu018E-u0191u0193u0194u0196-u0198u019Cu019Du019Fu01A0u01A2u01A4u01A6u01A7u01A9u01ACu01AEu01AFu01B1-u01B3u01B5u01B7u01B8u01BCu01C4u01C7u01CAu01CDu01CFu01D1u01D3u01D5u01D7u01D9u01DBu01DEu01E0u01E2u01E4u01E6u01E8u01EAu01ECu01EEu01F1u01F4u01F6-u01F8u01FAu01FCu01FEu0200u0202u0204u0206u0208u020Au020Cu020Eu0210u0212u0214u0216u0218u021Au021Cu021Eu0220u0222u0224u0226u0228u022Au022Cu022Eu0230u0232u023Au023Bu023Du023Eu0241u0243-u0246u0248u024Au024Cu024Eu0370u0372u0376u037Fu0386u0388-u038Au038Cu038Eu038Fu0391-u03A1u03A3-u03ABu03CFu03D2-u03D4u03D8u03DAu03DCu03DEu03E0u03E2u03E4u03E6u03E8u03EAu03ECu03EEu03F4u03F7u03F9u03FAu03FD-u042Fu0460u0462u0464u0466u0468u046Au046Cu046Eu0470u0472u0474u0476u0478u047Au047Cu047Eu0480u048Au048Cu048Eu0490u0492u0494u0496u0498u049Au049Cu049Eu04A0u04A2u04A4u04A6u04A8u04AAu04ACu04AEu04B0u04B2u04B4u04B6u04B8u04BAu04BCu04BEu04C0u04C1u04C3u04C5u04C7u04C9u04CBu04CDu04D0u04D2u04D4u04D6u04D8u04DAu04DCu04DEu04E0u04E2u04E4u04E6u04E8u04EAu04ECu04EEu04F0u04F2u04F4u04F6u04F8u04FAu04FCu04FEu0500u0502u0504u0506u0508u050Au050Cu050Eu0510u0512u0514u0516u0518u051Au051Cu051Eu0520u0522u0524u0526u0528u052Au052Cu052Eu0531-u0556u10A0-u10C5u10C7u10CDu13A0-u13F5u1E00u1E02u1E04u1E06u1E08u1E0Au1E0Cu1E0Eu1E10u1E12u1E14u1E16u1E18u1E1Au1E1Cu1E1Eu1E20u1E22u1E24u1E26u1E28u1E2Au1E2Cu1E2Eu1E30u1E32u1E34u1E36u1E38u1E3Au1E3Cu1E3Eu1E40u1E42u1E44u1E46u1E48u1E4Au1E4Cu1E4Eu1E50u1E52u1E54u1E56u1E58u1E5Au1E5Cu1E5Eu1E60u1E62u1E64u1E66u1E68u1E6Au1E6Cu1E6Eu1E70u1E72u1E74u1E76u1E78u1E7Au1E7Cu1E7Eu1E80u1E82u1E84u1E86u1E88u1E8Au1E8Cu1E8Eu1E90u1E92u1E94u1E9Eu1EA0u1EA2u1EA4u1EA6u1EA8u1EAAu1EACu1EAEu1EB0u1EB2u1EB4u1EB6u1EB8u1EBAu1EBCu1EBEu1EC0u1EC2u1EC4u1EC6u1EC8u1ECAu1ECCu1ECEu1ED0u1ED2u1ED4u1ED6u1ED8u1EDAu1EDCu1EDEu1EE0u1EE2u1EE4u1EE6u1EE8u1EEAu1EECu1EEEu1EF0u1EF2u1EF4u1EF6u1EF8u1EFAu1EFCu1EFEu1F08-u1F0Fu1F18-u1F1Du1F28-u1F2Fu1F38-u1F3Fu1F48-u1F4Du1F59u1F5Bu1F5Du1F5Fu1F68-u1F6Fu1FB8-u1FBBu1FC8-u1FCBu1FD8-u1FDBu1FE8-u1FECu1FF8-u1FFBu2102u2107u210B-u210Du2110-u2112u2115u2119-u211Du2124u2126u2128u212A-u212Du2130-u2133u213Eu213Fu2145u2160-u216Fu2183u24B6-u24CFu2C00-u2C2Eu2C60u2C62-u2C64u2C67u2C69u2C6Bu2C6D-u2C70u2C72u2C75u2C7E-u2C80u2C82u2C84u2C86u2C88u2C8Au2C8Cu2C8Eu2C90u2C92u2C94u2C96u2C98u2C9Au2C9Cu2C9Eu2CA0u2CA2u2CA4u2CA6u2CA8u2CAAu2CACu2CAEu2CB0u2CB2u2CB4u2CB6u2CB8u2CBAu2CBCu2CBEu2CC0u2CC2u2CC4u2CC6u2CC8u2CCAu2CCCu2CCEu2CD0u2CD2u2CD4u2CD6u2CD8u2CDAu2CDCu2CDEu2CE0u2CE2u2CEBu2CEDu2CF2uA640uA642uA644uA646uA648uA64AuA64CuA64EuA650uA652uA654uA656uA658uA65AuA65CuA65EuA660uA662uA664uA666uA668uA66AuA66CuA680uA682uA684uA686uA688uA68AuA68CuA68EuA690uA692uA694uA696uA698uA69AuA722uA724uA726uA728uA72AuA72CuA72EuA732uA734uA736uA738uA73AuA73CuA73EuA740uA742uA744uA746uA748uA74AuA74CuA74EuA750uA752uA754uA756uA758uA75AuA75CuA75EuA760uA762uA764uA766uA768uA76AuA76CuA76EuA779uA77BuA77DuA77EuA780uA782uA784uA786uA78BuA78DuA790uA792uA796uA798uA79AuA79CuA79EuA7A0uA7A2uA7A4uA7A6uA7A8uA7AA-uA7AEuA7B0-uA7B4uA7B6uFF21-uFF3AU00010400-U00010427U000104B0-U000104D3U00010C80-U00010CB2U000118A0-U000118BFU0001D400-U0001D419U0001D434-U0001D44DU0001D468-U0001D481U0001D49CU0001D49EU0001D49FU0001D4A2U0001D4A5U0001D4A6U0001D4A9-U0001D4ACU0001D4AE-U0001D4B5U0001D4D0-U0001D4E9U0001D504U0001D505U0001D507-U0001D50AU0001D50D-U0001D514U0001D516-U0001D51CU0001D538U0001D539U0001D53B-U0001D53EU0001D540-U0001D544U0001D546U0001D54A-U0001D550U0001D56C-U0001D585U0001D5A0-U0001D5B9U0001D5D4-U0001D5EDU0001D608-U0001D621U0001D63C-U0001D655U0001D670-U0001D689U0001D6A8-U0001D6C0U0001D6E2-U0001D6FAU0001D71C-U0001D734U0001D756-U0001D76EU0001D790-U0001D7A8U0001D7CAU0001E900-U0001E921U0001F130-U0001F149U0001F150-U0001F169U0001F170-U0001F189]"
p = re.compile(pLu)
if p.match("Żółw"):
    print("Capitalized!")

Vea la demostración de IDEONE. Para que funcione en Python 2.x, asegúrese de agregar u prefix al string literales.

Hay otras formas de obtener Letra mayúscula Unicode clase de personaje en Python usando unicodedata y sys paquetes como

# Python 3
pLu = '[]'.format("".join([chr(i) for i in range(sys.maxunicode) if chr(i).isupper()]))
# Python 2
pLu = u'[]'.format(u"".join([unichr(i) for i in xrange(sys.maxunicode) if unichr(i).isupper()]))

Sin embargo, este rango no coincide con todas las letras mayúsculas que se muestran en la página Utilidades Unicode: UnicodeSet para [:upper:] Clase de caracteres POSIX.

Cf .:

  • Python 2.7 len([unichr(i) for i in xrange(sys.maxunicode) if unichr(i).isupper()]) muestra 1427
  • Python 3.5 len([chr(i) for i in range(sys.maxunicode) if chr(i).isupper()]) muestra 1751
  • Python 3.6 len([chr(i) for i in range(sys.maxunicode) if chr(i).isupper()]) muestra 1822
  • Se muestra la página CLDR de utilidades Unicode actual 1,822 letras mayúsculas para [:upper:] clase, y 1,702 Para el pLu.

Con PyPi regex módulo, es más simple:

import regex
p = regex.compile(r"pLu") # To support (currently) 1702 uppercase letters
# p = regex.compile(r"[[:upper:]]") # To support (currently) 1822 uppercase letters
if p.match("Żółw"):
    print("Capitalized!")

En Python 2.x debes usar:

p = regex.compile(ur"pLu")
p = regex.compile(ur"[[:upper:]]")

o

p = regex.compile(r"pLu", regex.U)
p = regex.compile(r"[[:upper:]]", regex.U)

re es excesivo cuando solo puedes usar word[0].isupper().

>>>> 'żółć'[0].isupper()
False
>>>> 'Żółw'[0].isupper()
True
>>>> 'ćMa'[0].isupper()
False

>>> words
'Does not match Äh Oh Äi Üs üx Öjjj'

>>> re.findall(r"(b[A-ZÜÖÄ][a-z.-]+b)", words, re.UNICODE)
['Does', 'Äh', 'Oh', 'Äi', 'Üs', 'Öjjj']

Simplemente agregue a la lista todas las letras Unicode que no están en el rango AZ, agregué solo las diéresis alemanas.

Puede encontrar todas las letras no ASCII (AZ) así:

>>> [c for c in words if not c.isalpha() and not c.isdigit() and not c.isspace()]
['xc3', 'x84', 'xc3', 'x84', 'xc3', 'x9c', 'xc3', 'xbc', 'xc3', 'x96']

Ahora tendrás que averiguar cuáles son las mayúsculas.

Recuerda que tienes la capacidad de esclarecer si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *