如何从字符串中删除非INTERNATIONAL字母数字字符
本文关键字:INTERNATIONAL 数字字符 删除 字符串 | 更新日期: 2023-09-27 18:00:34
在不删除非拉丁字母数字字符(如'Ж', 'ק', 'ओ', 'を'
)的情况下,如何从字符串中删除(或识别)非字母数字字符,如'-', '*', '‡', '€', '⁋', '™'
?
删除部分很容易,我的问题是区分非拉丁字母和非拉丁符号。
*所有现有的问答;A我发现过滤掉了非拉丁字母。
一个简单的解决方案(仅适用于基本BMP字符)是:
string str = "-*‡€⁋™Жקओを";
var sb = new StringBuilder();
foreach (char ch in str)
{
bool isLetter = char.IsLetterOrDigit(ch);
if (isLetter)
{
sb.Append(ch);
}
}
string str2 = sb.ToString();
Char.IsLetterOrDigit
被描述为:
指示指定的Unicode字符分类为字母还是十进制数字。
如果你想支持代理对,它会变得更复杂:
// 'U0001F000 is MAHJONG TILE EAST WIND
// 'U0001D49E is MATHEMATICAL SCRIPT CAPITAL C
string str = "-*‡€⁋™Жקओを'U0001F000'U0001D49E";
var sb = new StringBuilder();
for (int i = 0; i < str.Length; i++)
{
bool isLetter = char.IsLetterOrDigit(str, i);
bool isHighSurrogate = char.IsHighSurrogate(str[i]);
if (isLetter)
{
sb.Append(str, i, isHighSurrogate ? 2 : 1);
}
if (isHighSurrogate && i + 1 < str.Length && char.IsLowSurrogate(str[i + 1]))
{
i++;
}
}
string str2 = sb.ToString();