python - regulares - ¿Cuál es la expresión regular adecuada para coincidir con todas las formas de letras minúsculas de utf-8/unicode?
patrones expresiones regulares python (4)
Es posible que desee echar un vistazo a regular-expressions.info .
Sin embargo, por lo que sé, no hay modificadores o clases de caracteres que expresen "solo caracteres en minúsculas" (y no todos los idiomas tienen caracteres en minúsculas), así que diría que es posible que tenga que usar múltiples rangos (casi tantos como sea posible). hay bloques unicode
Edición: leyendo un poco más sobre esto, podría haber una manera: [/p{Ll}/p{Lo}]
que significa caracteres en minúscula con una variante en mayúscula o caracteres que no tienen mayúsculas y minúsculas (en caso de caracteres chinos por ejemplo).
Regex [/p{Ll}/p{Lo}]+
coincide con la cadena de prueba àÀhelloHello你好Прывітанне
y reemplazando las coincidencias con x
resulta en xÀxHxПx
mientras que reemplaza las coincidencias de [/p{Ll}]+
resultados en xÀxHx你好Пx
( note los caracteres chinos que no fueron emparejados).
Me gustaría hacer coincidir todas las formas de letras minúsculas en el bloque latino. El trivial ''[az]'' solo hace coincidir los caracteres entre U + 0061 y U + 007A, y no todas las demás formas en minúscula.
Me gustaría hacer coincidir todas las letras minúsculas, y lo más importante, todas las letras minúsculas acentuadas en el bloque latino utilizado en los idiomas EFIGS.
[a-zà-ý] es un comienzo, pero todavía hay un montón de otros caracteres en minúscula (consulte http://www.unicode.org/charts/PDF/U0000.pdf ). ¿Hay alguna forma recomendada de hacer esto?
Para tu información, estoy usando Python, pero sospecho que este problema es en varios idiomas.
El método "islower ()" incorporado de Python parece hacer la comprobación correcta:
lower = ''''
for c in xrange(0,2**16):
if unichr(c).islower():
lower += unichr(c)
print lower
Parece que esta receta publicada en el viejo 2005
import sys, re
uppers = [u''['']
for i in xrange(sys.maxunicode):
c = unichr(i)
if c.isupper(): uppers.append(c)
uppers.append(u'']'')
uppers = u"".join(uppers)
uppers_re = re.compile(uppers)
print uppers_re.match(''A'')
sigue siendo relevante.
Python actualmente no admite propiedades Unicode en expresiones regulares. Consulte esta respuesta para obtener un enlace a la biblioteca de Ponyguruma que los admite.
Al usar dicha biblioteca, puede usar /p{Ll}
para hacer coincidir cualquier letra minúscula en una cadena Unicode.
Cada personaje en el estándar Unicode está en exactamente una categoría. /p{Ll}
es la categoría de letras minúsculas, mientras que /p{L}
comprende todos los caracteres en una de las categorías "Letra" (Letra, mayúscula; Letra, minúscula; Letra, titlecase; Letra, modificador; y Letra, otro). Para obtener más información, consulte el capítulo Propiedades de caracteres del estándar de Unicode . O vea esta página para obtener una buena explicación sobre el uso de Unicode en expresiones regulares.
si usa /p{L}
coincidirá con cualquier letra Unicode. Revisa los ejemplos aquí . También puede combinarlo con /p{M}
para hacer coincidir los idiomas de Hebrew-esqe que incluyen marcas diacríticas. (/p{L}|/p{M})+
EDITAR:
Me perdí la parte sobre solo letras minúsculas la primera vez. /p{L}
coincidirá con todas las letras, /p{Ll}
solo coincidirá con minúsculas.