2012-04-16 30 views
5

我想使用正則表達式將多語言字符串分割成單語標記。使用正則表達式分割多語言字符串到單語標記

例如,對於這個英語 - 阿拉伯語字符串:

「他的名字是محمد,他的母親的名字是آمنه。」

的結果必須是如下:

  1. '他的名字是'
  2. 'محمد'
  3. '和他的母親的名字是'
  4. 'آمنه。'
+0

你有什麼試過的?你卡在哪裏?它總是英語 - 阿拉伯語,或者你至少知道你的字符串中會出現哪些腳本? – 2012-04-16 05:32:32

+0

@TimPietzcker是的,它總是英文 - 阿拉伯文。 – ARZ 2012-04-16 05:38:47

回答

6

它並不完美(你一定要嘗試一些真實世界的例子,看看它是否適合),但它是一個開始:

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

這按空白進行分割/標點符號如果前面字符來自阿拉伯語區塊,以下字符來自基本拉丁語區塊(反之亦然)。

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

該表達式省略了所有的阿拉伯數字令牌! – ARZ 2012-04-19 10:10:52

相關問題