5

正規表現を使用して、多言語文字列を単言語トークンに分割したいと考えています。

たとえば、この英語-アラビア語の文字列の場合:

「彼の名前は محمد で、彼の母親の名前は آمنه でした。」

結果は次のようになります。

  1. '彼の名前は '
  2. 「むかし」
  3. 'そして彼の母親の名前は'
  4. 「そうです。」
4

2 に答える 2

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

これは、前の文字がアラビア語ブロックからのもので、次の文字が基本ラテン ブロックからのものである場合 (またはその逆)、空白/句読点で分割されます。

于 2012-04-16T05:45:27.630 に答える
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();
于 2012-04-19T06:56:08.030 に答える