2012-04-16 29 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

相关问题