在排版中我们基本认为一个英文字符占据宽度基本为汉字的1/2,twitter中的140个字符,用英语来写的话其实写不几个单词,而中文的140个汉字就基本能把一个观点表达清楚。因此有些情况是要求英文字符是按中文字符的半个来计算的,那么可以使用正则表达式来匹配每个字符是否为汉字。以下根据不同需要来进行匹配
[\u4E00-\u9FA5] 匹配简体
[\u4E00-\u9FFF] 匹配简体和繁体
[\u2E80-\u9FFF] 匹配所有东亚区的语言
/// <summary>
/// 检查中英文混合字符长度(英文字符算0.5,中文算1)
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
private float GetStringLengthWithChinlish(string source)
{
Regex r = new Regex(@"[\u4E00-\u9fa5]");//中文
float len = 0.0F;
char[] stringChar = source.ToCharArray();
foreach (char chr in stringChar) {
Console.Write(chr.ToString());
if (r.IsMatch(chr.ToString())) {
len += 1;
} else {
len += 0.5F;
}
}
return len;
}