使用正则表达式将多语言字符串拆分为单语言标记

ARZ*_*ARZ 5 c# regex

我想使用正则表达式将多语言字符串拆分为单语言标记.

例如,这个英语 - 阿拉伯语字符串:

"他的名字是محمد,他的母亲名字是آمنه."

结果必须如下:

  1. '他的名字曾是 '
  2. "محمد"
  3. '和他母亲的名字是'
  4. 'آمنه.'

Tim*_*ker 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);
Run Code Online (Sandbox Code Playgroud)

如果前面的字符来自阿拉伯语块并且后面的字符来自Basic Latin块(反之亦然),则会在空格/标点符号上分割.