2012-04-16 7 views
5

Quiero dividir una cadena multilingüe en tokens uni-linguales usando Regex.Separación de cadenas multilingües usando Regex para tokens uni-linguales

por ejemplo, para esta cadena de Inglés-árabe:

'se llamaba محمد, y su nombre era آمنه madre.'

El resultado debe ser de la siguiente manera:

  1. 'que se llamaba'
  2. 'محمد,'
  3. 'y su nombre era madre'
  4. 'آمنه.'
+0

¿Qué ha probado? ¿Dónde estás atrapado? ¿Es siempre inglés-árabe, o al menos sabe qué scripts van a ocurrir en sus cadenas? –

+0

@TimPietzcker Sí, siempre es inglés-árabe. – ARZ

Respuesta

6

No es perfecto (definitivamente hay que probarlo en algunos ejemplos del mundo real para ver si cabe), pero es un comienzo:

splitArray = Regex.Split(subjectString, 
    @"(?<=\p{IsArabic}) # (if the previous character is Arabic) 
    [\p{Zs}\p{P}]+   # split on whitespace/punctuation 
    (?=\p{IsBasicLatin}) # (if the following character is Latin) 
    |      # or 
    (?<=\p{IsBasicLatin}) # vice versa 
    [\s\p{P}]+ 
    (?=\p{IsArabic})", 
    RegexOptions.IgnorePatternWhitespace); 

Esto divide el espacio en blanco/puntuacion si el precedente el carácter es del bloque árabe y el siguiente carácter es del bloque latino básico (o viceversa).

0
System.Text.RegularExpressions.Regex regx = new System.Text.RegularExpressions.Regex(@"([\s\(\:]*[a-zA-Z]+[\s\)\:]*)+"); 
var matchs = regx.Matches(input).Cast<System.Text.RegularExpressions.Match>().ToList(); 
+0

¡Esta expresión omite todos los tokens árabes! – ARZ

Cuestiones relacionadas