我想使用正則表達式將多語言字符串分割成單語標記。使用正則表達式分割多語言字符串到單語標記
例如,對於這個英語 - 阿拉伯語字符串:
「他的名字是محمد,他的母親的名字是آمنه。」
的結果必須是如下:
- '他的名字是'
- 'محمد'
- '和他的母親的名字是'
- 'آمنه。'
我想使用正則表達式將多語言字符串分割成單語標記。使用正則表達式分割多語言字符串到單語標記
例如,對於這個英語 - 阿拉伯語字符串:
「他的名字是محمد,他的母親的名字是آمنه。」
的結果必須是如下:
它並不完美(你一定要嘗試一些真實世界的例子,看看它是否適合),但它是一個開始:
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);
這按空白進行分割/標點符號如果前面字符來自阿拉伯語區塊,以下字符來自基本拉丁語區塊(反之亦然)。
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();
該表達式省略了所有的阿拉伯數字令牌! – ARZ 2012-04-19 10:10:52
你有什麼試過的?你卡在哪裏?它總是英語 - 阿拉伯語,或者你至少知道你的字符串中會出現哪些腳本? – 2012-04-16 05:32:32
@TimPietzcker是的,它總是英文 - 阿拉伯文。 – ARZ 2012-04-16 05:38:47