Bah*_*nji 7 c# regex unicode normalization unicode-normalization
如何用普通的alf替换alf bel tanween
我不知道 C#,但这更像是一个 UNICODE 问题。我会通过UNICODE 规范化,使用这个函数来做到这一点。
首先,归一化为分解形式。接下来,从“Mark, Nonspacing”类别[Mn] 中过滤掉所有字符。最后,归一化回组合形式。
如果我没看错,您的字形在 UNICODE 中由ARABIC LETTER ALEF WITH HAMZA ABOVE( U+0623 , [Lo] ) 后跟ARABIC FATHATAN( U+064B , [Mn] ) 表示。第一个字符分解为ARABIC LETTER ALEF( U+0627 , [Lo] ) + ARABIC HAMZA ABOVE( U+0654 , [Mn] )。
这是转换链(第一个箭头表示分解,第二个箭头表示过滤掉非空格标记,第三个箭头表示组合):
U+0623 + U+064B ? U+0627 + U+0654 + U+064B ? U+0627 ? U+0627
Run Code Online (Sandbox Code Playgroud)
分解后,从[Mn]类别中删除所有字符,然后重新组合,只剩下您了ARABIC LETTER ALEF。
感谢 Bolo 经过几分钟的搜索后的启发,我这样做了:
string s = "";
foreach (Char c in x)
{
if (((int)c).ToString("x").ToLower() != "64b")
s += c.ToString();
}
Run Code Online (Sandbox Code Playgroud)
其中 x 是我的字符串
就像这样,我从字符串中排除了阿拉伯法塔坦