2012-04-16 24 views
5

Chcę podzielić łańcuch wielojęzykowy na tokeny uni-językowe przy użyciu Regex.Podział wielojęzykowego ciągu znaków przy użyciu Regexa na tokeny jednojęzyczne

na przykład do tej angielsko-arabski wyrażenie:

"nazywał się محمد, a imię jego matka była آمنه.

Wynik musi być jak poniżej:

  1. 'nazywał się'
  2. 'محمد'
  3. 'a imię jego matka była'
  4. 'آمنه.
+0

Co próbowaliście? Gdzie utknąłeś? Czy zawsze jest to angielski-arabski, czy przynajmniej wiesz, które skrypty pojawią się w twoich strunach? –

+0

@TimPietzcker Tak, zawsze jest to angielski-arabski. – ARZ

Odpowiedz

6

To nie jest idealne (na pewno trzeba spróbować w niektórych przykładach rzeczywistych, aby zobaczyć, czy pasuje), ale to dopiero początek:

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); 

ten dzieli się na białej spacji/interpunkcji jeśli poprzedzający znak pochodzi z bloku arabskiego, a następujący znak pochodzi z bloku Basic Latin (lub na odwrót).

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

To wyrażenie pomija wszystkie arabskie tokeny! – ARZ

Powiązane problemy