Estoy aprendiendo acerca de las expresiones regulares (regex) para inglés y aunque algunos de los conceptos parecen aplicarse a otros idiomas como el japonés, siento que muchos otros no lo harían. Por ejemplo, un uso común de regex es encontrar si una palabra tiene caracteres no alfanuméricos. No veo cómo esta técnica, así como otras, funcionarían para los japoneses, ya que no solo existen tres sistemas de escritura, sino que los kanji también son muy complejos y abarcan un rango mucho mayor que los caracteres alfanuméricos. Agradecería cualquier información sobre este tema, así como áreas en las que investigar más ya que tengo muy poco conocimiento sobre el tema, aunque he tomado muchos cursos de japonés. Si es posible, me gustaría que sus respuestas usen python y Java, ya que esos son los idiomas con los que me siento cómodo. Gracias por tu ayuda.Expresiones regulares (regex) en japonés
Respuesta
Las expresiones regulares de Python ofrecen soporte limitado para las características Unicode. Java es mejor, particularmente Java 7.
Java admite categorías Unicode. Por ejemplo, \p{L}
(y su abreviatura, \pL
) coincide con cualquier letra en cualquier idioma. Esto incluye caracteres ideográficos japoneses.
Java 7 admite scripts Unicode, incluidos los scripts Hiragana, Katakana, Han y latinos de los que generalmente se compone el texto en japonés. Puede hacer coincidir cualquier carácter en uno de estos scripts utilizando \p{Han}
, \p{Hiragana}
, \p{Katakana}
y \p{Latin}
. Puede combinarlos en una clase de personaje como [\p{Han}\p{Hiragana}\p{Katakana}]
. Puede utilizar una mayúscula P
(como en, \P{Han}
) para que coincida con cualquier carácter, excepto los del script Han.
Java 7 admite bloques Unicode. A menos que ejecute su código en Android (donde los scripts no están disponibles), generalmente debe evitar los bloques, ya que son menos útiles y precisos que los scripts Unicode. Hay una variedad de bloques relacionados con el texto en japonés, incluyendo \p{InHiragana}
, \p{InKatakana}
, \p{InCJK_Unified_Ideographs}
, \p{InCJK_Symbols_and_Punctuation}
, etc.
Tanto Java y Python puede hacer referencia a los puntos de código individuales utilizando \uFFFF
, donde FFFF
es cualquier número headecimal de cuatro dígitos. Java 7 puede hacer referencia a cualquier punto de código Unicode, incluidos los que están más allá del plano multilingüe básico, utilizando, p. \x{10FFFF}
. Las expresiones regulares de Python no son compatibles con Unicode de 21 bits, pero sí lo hacen las cadenas de Python, por lo que puede insertar un punto de código en una expresión regular usando, p. \U0010FFFF
(mayúscula U
seguida de ocho dígitos hexadecimales).
El Java 7 (?U)
o UNICODE_CHARACTER_CLASS
bandera hace taquigrafías de clase de caracteres como \w
y \d
Unicode en cuenta, por lo que coincidirá con caracteres ideográficos japoneses, etc. (pero tenga en cuenta que \d
todavía no coincidirá con kanji de números como 一二 三四) . Python 3 hace que las clases abreviadas sean conocidas por Unicode de forma predeterminada. En Python 2, las clases abreviadas son conscientes de Unicode cuando se utiliza el indicador re.UNICODE
o re.U
.
Tiene razón en que no todas las ideas regex se transmiten igual de bien a todas las secuencias de comandos. Algunas cosas (como el uso de mayúsculas y minúsculas) simplemente no tienen sentido con el texto en japonés.
Es muy probable que el segundo párrafo sea incorrecto según la documentación de Java 7. ** ¿Has probado? ** El resto no lo puedo probar ahora. – nhahtdh
Python versión 3 regex admite Unicode más o menos de la misma forma que Java 7 lo hace para la clase Pattern: http://docs.python.org/py3k/library/re.html – nhahtdh
@nhahtdh, sus comentarios no son útiles. Sí, Java admite scripts Unicode (descritos en mi segundo párrafo) y no requiere el prefijo "Is" para usarlos (recomiendo no usar "Is", ya que eso lo hace menos portátil). Y no, Python 3 no tiene casi el mismo soporte para funciones Unicode en su sintaxis de expresiones regulares que Java (sin scripts, categorías, bloques, etc. de Unicode). – slevithan
Las clases de caracteres de Java hacen algo como lo que estás buscando. Ellos son los que comienzan con \ p here.
Para Python
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
kanji = u'漢字'
hiragana = u'ひらがな'
katakana = u'カタカナ'
str = kanji + hiragana + katakana
#Match Kanji
regex = u'[\u4E00-\u9FFF]+' # == u'[一-龠々]+'
match = re.search(regex, str, re.U)
print match.group().encode('utf-8') #=> 漢字
#Match Hiragana
regex = u'[\u3040-\u309Fー]+' # == u'[ぁ-んー]+'
match = re.search(regex, str, re.U)
print match.group().encode('utf-8') #=> ひらがな
#Match Katakana
regex = u'[\u30A0-\u30FF]+' # == u'[ァ-ヾ]+'
match = re.search(regex, str, re.U)
print match.group().encode('utf-8') #=>カタカナ
- 1. C++ expresiones regulares con Boost Regex
- 2. expresiones regulares en Javascript con jQuery Contiene expresiones regulares extensión
- 3. acento expresiones regulares insensibles
- 4. Expresiones regulares en C++ STL
- 5. Javascript Regex: ¿Cómo palabras específicas en negrita con expresiones regulares?
- 6. Expresiones regulares en SQLalchemy consultas?
- 7. UTF expresiones regulares en Python
- 8. Puntuacion expresiones regulares en Java
- 9. Java expresiones regulares replaceAll multilínea
- 10. Ruby: hexadecimal en expresiones regulares
- 11. Doble interpolación de expresiones regulares en Perl
- 12. opciones de expresiones regulares múltiples con C# Regex
- 13. Expresiones regulares y GWT
- 14. Limpiar expresiones regulares de Python
- 15. expresiones regulares (expresiones regulares), reemplace la segunda aparición en javascript
- 16. Expresiones regulares en findstr
- 17. Expresiones regulares en C
- 18. Expresiones regulares en OCaml
- 19. expresiones regulares en Vimscript
- 20. Expresiones regulares en J2ME
- 21. Expresiones regulares en Puntuación
- 22. Multiplicación con expresiones regulares .NET
- 23. nomArchivo extracto usando expresiones regulares
- 24. Analizador de expresiones regulares ligero
- 25. depuración de Perl expresiones regulares
- 26. Escapar caracteres especiales en Java Expresiones regulares
- 27. Empareje eficazmente múltiples expresiones regulares en Python
- 28. Expresiones regulares en C# ejecutando lentamente
- 29. C++ 0x expresiones regulares en GCC
- 30. ¿es posible usar expresiones regulares en C++?
mayoría de las implementaciones de expresiones regulares compatibles con Unicode. Qué tipo de expresiones regulares para escribir es una pregunta separada. – SLaks
@ Something Jones: Puede aplicar caracteres japoneses utilizando el valor hexadecimal de Unicode. mi.g: \ uXXXX en el que XXXX es el valor del carácter Unicode. – jaselg
Algo que puede ayudar: http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml. Tenga en cuenta que no separa el glifo chino del glifo japonés del mismo carácter. – nhahtdh