2009-03-17 14 views
10

Una expresión regular normal para permitir letras solo sería "[a-zA-Z]" pero soy de Suecia, así que tendría que cambiar eso en "[a- zåäöA-ZÅÄÖ] ". Pero supongamos que no sé qué letras se usan en el alfabeto.Expresión regular para capturar letras más allá de az

¿Existe alguna manera de saber automáticamente qué caracteres son válidos en una configuración/idioma determinados o si simplemente debo hacer una lista negra de caracteres que yo (creo que) sé que no quiero?

Respuesta

13

Puede usar \ pL para que coincida con cualquier "letra", que admitirá todas las letras en todos los idiomas. Puede limitarlo a idiomas específicos usando 'bloques nombrados'. Se puede encontrar más información en la documentación de Character Classes en MSDN.

Mi recomendación sería poner la expresión regular (o al menos la parte de "letra") en un recurso localizado, que luego puede extraer en función de la configuración regional actual y formar en el patrón más grande.

+4

Para aquellos que no están tan familiarizados con la expresión regular (como yo), el código correcto actual es: \ p {Ll} –

+0

Para hacer coincidir letras use '\ p {L}'. Para unir letras con signos diacríticos, use '(?> \ P {L} \ p {M} *)'. Para hacer coincidir letras mayúsculas, use '\ p {Lu}'. Para hacer coincidir letras minúsculas, sí, use '\ p {Ll}'. –

0

Todos los caracteres son "válidos", por lo que creo que realmente está pidiendo caracteres que "en general se consideran letras" en una configuración regional.

La especificación Unicode tiene algunas pautas, pero en general la respuesta es "no", necesitaría enumerar los caracteres que usted decide que son "letras".

+0

I sugerido [: alpha:] en una respuesta He suprimido.No sé C#, así que probablemente estoy equivocado, pero los motores de expresiones regulares que conozco cambian las letras con las que coincide en función de la configuración regional. –

+0

@Jon: .net no admite [: name:] para las clases con nombre, pero tiene una sintaxis alternativa para el mismo propósito. – Richard

+0

@Jason: solo necesitaría enumerar si la definición de letra difería de la de Unicde, y la substracción de clase de caracteres no era suficiente, p. [\ p {L} - [\ p {IsBasicLatin}]] coincidiría con todas las letras que no sean ASCII. – Richard

3

¿Qué pasa con \ p {name}?

Coincide con cualquier carácter en la clase de caracteres nombrados especificada por {nombre}. Los nombres admitidos son grupos Unicode y rangos de bloque. Por ejemplo, Ll, Nd, Z, IsGreek, IsBoxDrawing.

No sé lo suficiente sobre unicode, pero ¿quizás tus personajes se ajustan a una clase Unicode?

0

¿Existe alguna manera de saber automáticamente qué caracteres son válidos en una configuración/idioma determinado o debería simplemente hacer una lista negra de caracteres que yo (creo que) sé que no quiero?

Esto no es, en general , posible.

Después de todo, el texto de Engligh incluye algunos caracteres acentuados (por ejemplo, en "fête" y "ingenuo", que en inglés-inglés para ser estrictamente correcto todavía usan acentos). En algunos idiomas, algunas de las letras estándar rara vez se utilizan (por ejemplo, y-diéresis en francés).

Considere la inclusión de incluir palabras extranjeras incluidas (este será a menudo el caso donde se usan términos técnicos). Las citas serían otra fuente.

Si sus requisitos están suficientemente definidos, es posible que pueda crear una definición, pero esto requiere experiencia lingüística en ese idioma.

0

Esta expresión regular permite sólo símbolos válidos a través de:

[a-zA-ZÀ-ÿ ] 
Cuestiones relacionadas