字符串替换C#中的变音符号

ili*_*ica 5 c# regex string replace

我想使用方法来创建用户友好的URL.因为我的网站是克罗地亚语,有些字符我不想剥离,而是用另一个替换它们.例如,这个字符串:
ŠĐĆŽšđčćž
需要是:sdccz-sdccz

所以,我想制作两个数组,一个包含要替换的字符,另一个数组包含替换字符:

string[] character = { "Š", "?", "?", "?", "Ž", "š", "?", "?", "?", "ž" };
string[] characterReplace = { "s", "d", "c", "c", "z", "s", "d", "c", "c", "z" };
Run Code Online (Sandbox Code Playgroud)

最后,这两个数组应该在一些方法中使用,它将获取字符串,查找匹配并替换它们.在php中我用preg_replace函数来处理这个问题.在C#中,这不起作用:

s = Regex.Replace(s, character, characterReplace);
Run Code Online (Sandbox Code Playgroud)


如果有人能提供帮助,我将不胜 谢谢

Jos*_*ola 14

Jon Skeet 在新闻组中提到了以下代码 ......

static string RemoveAccents (string input)
{
    string normalized = input.Normalize(NormalizationForm.FormKD);
    Encoding removal = Encoding.GetEncoding(Encoding.ASCII.CodePage,
                                            new EncoderReplacementFallback(""),
                                            new DecoderReplacementFallback(""));
    byte[] bytes = removal.GetBytes(normalized);
    return Encoding.ASCII.GetString(bytes);
}
Run Code Online (Sandbox Code Playgroud)

编辑

也许我很疯狂,但我只是跑了以下......

Dim Input As String = "Š??Ž-š???ž"
Dim Builder As New StringBuilder()

For Each Chr As Char In Input
    Builder.Append(Chr)
Next

Console.Write(Builder.ToString())
Run Code Online (Sandbox Code Playgroud)

输出是 SDCZ-sdccz


Mar*_*ers 13

看来你想剥掉变音符号并留下基本字符.我在这里推荐Ben Lings的解决方案:

string input = "Š??Ž š???ž";
string decomposed = input.Normalize(NormalizationForm.FormD);
char[] filtered = decomposed
    .Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
    .ToArray();
string newString = new String(filtered);
Run Code Online (Sandbox Code Playgroud)

编辑:轻微的问题!它不适用于Đ.结果是:

S?CZ s?ccz
Run Code Online (Sandbox Code Playgroud)