我想使用正则表达式将多语言字符串拆分为单语言标记。
例如对于这个英语-阿拉伯语字符串:
“他的名字是محمد,他的母亲名字是آمنه。”
结果必须如下:
- '他以前的名字是 '
- '重要的,'
- '而他母亲的名字是'
- 'آمنه.'
它并不完美(你肯定需要在一些真实世界的例子中尝试一下,看看它是否合适),但这是一个开始:
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();