2012-04-16 19 views
5

Çok dilli bir dizeyi, Regex kullanarak tek dilli simgelere bölmek istiyorum. bu İngilizce Arapça dize için örneğin Tekdüzenli tokenlere Regex kullanarak çok dilli dizeyi bölme

:

'Adının محمد oldu ve annesi adını آمنه oldu.'

sonuç olarak altında olmalıdır:

  1. 'محمد,'
  2. 've annesi adıydı'
  3. 'onun adı' 'آمنه.' Mükemmel değil
+0

Ne denediniz? Nerede kaldın? Her zaman İngilizce-Arapça mı, yoksa en azından dizelerinizde hangi yazıların olacağını biliyor musunuz? –

+0

@TimPietzcker Evet, her zaman İngilizce-Arapça. – ARZ

cevap

6

(kesinlikle Üstünüze olacak görmek için bazı gerçek dünya örnekleri üzerinde denemek gerekir), ama bu bir başlangıç:

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

önceki bu boşluk/noktalama üzerinde böler Karakter Arapça bloktan ve aşağıdaki karakter Basic Latin bloğundan (veya tersi).

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

Bu ifade, tüm arapça jetonlarını atlar! – ARZ

İlgili konular