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 usopLu
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()])
muestra1427
- Python 3.5
len([chr(i) for i in range(sys.maxunicode) if chr(i).isupper()])
muestra1751
- Python 3.6
len([chr(i) for i in range(sys.maxunicode) if chr(i).isupper()])
muestra1822
- Se muestra la página CLDR de utilidades Unicode actual
1,822
letras mayúsculas para[:upper:]
clase, y1,702
Para elpLu
.
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ó.