2012-04-16 10 views
5

Regexを使用して複数言語の文字列を単一言語のトークンに分割したい。Regexを単一言語のトークンに分割する多言語の文字列を分割する

は、例えば、この英語 - アラビア語の文字列:

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

結果は以下の通りである必要があります

  1. 'محمد、'
  2. 'と彼の母親の名前はだった'
  3. '彼の名前でした' 'آمنه'。それは完璧ではない
+0

何を試しましたか?あなたはどこにいるのですか?それは常に英語 - アラビア語ですか、あるいはあなたの文字列にどのスクリプトが出現するかを少なくとも知っていますか? –

+0

@TimPietzckerはい、いつも英語 - アラビア語です。 – ARZ

答えて

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

関連する問題