2011-05-14 16 views
7

Tengo algunos documentos que pasaron por la conversión de OCR de PDF a HTML. Debido a eso, terminaron teniendo muchos signos de puntuación unicode aleatorios donde el convertidor se equivocó (es decir, elipses, etc.). También tienen correctamente un grupo de caracteres no ingleses, pero aún alfabéticos, como é, y caracteres rusos, etc. ...¿Hay alguna forma de combinar con cualquier carácter Unicode no alfabético?

¿Hay alguna forma de hacer una Regex que coincida con cualquier carácter alfabético Unicode (de alfabetos de cualquier idioma)? ¿O uno que solo coincida con caracteres no alfabéticos? Cualquiera de los dos sería realmente útil e increíble. Estoy usando Perl, si eso cambia algo. ¡Gracias!

Respuesta

19

Consulte las propiedades de caracteres Unicode: http://www.regular-expressions.info/unicode.html#prop. Creo que lo que está buscando es probablemente

\p{L} 

que coincidirá con cualquier letra o ideograma. También puede incluir letras con marcas en ellos, por lo que podría hacer

\p{L}\p{M}* 

En cualquier caso, todos los diferentes tipos de propiedades de carácter se detallan en el primer enlace.

Editar: También le recomendamos que consulte esta respuesta de Desbordamiento de pila para analizar si \ w coincide con los caracteres Unicode. Ellos sugieren que también se podría utilizar \ {p} Palabra o \ {p} alnum: Does \w match all alphanumeric characters defined in the Unicode standard?

+2

De la misma manera, puede usar '\ P' para hacer coincidir el carácter * no * que tiene una propiedad en particular (por lo que' \ P {L} 'coincide con cualquier carácter que no sea de letras). –

+0

¿Puedo usar un código de carácter omitiendo algunos puntos de código? Como \ p {P} omitiendo puntos y comas? La negación de eso sería perfecto para mí. – Eli

2

Dependiendo del lenguaje que está utilizando, el motor de expresiones regulares puede o puede no ser consciente de Unicode. Si es así, puede o no conocer los tokens de propiedad \p{}. Si lo hace, su respuesta está en Unicode Characters and Properties in Jan Goyvaerts' regex tutorial.

Puede usar \p{Latin}, si es compatible, para detectar todo lo que es (o no es, por supuesto) de un idioma que utiliza cualquiera de los bloques de Unicode Latin.

Cuestiones relacionadas