C# 如何用此规则替换字符串?

C# 如何用此规则替换字符串?,c#,.net,string,C#,.net,String,我有一个字符串,可以包含任何类型的字符。我想: 用非重音字符替换重音字符(如a必须变成a,e=>e,等等) 仅在字符串中保留a-zA-Z、数字和- 我该怎么做?您可以访问字符串中的每个字符。获取实际的字符,将其发送给一个方法。在这种方法中,您有一组if-lse或case开关。这就是你的规矩。如果其中一条规则接受您的字符,则返回该字符的替换字符。以下内容适用于您: // Remove all accents var bytes = Encoding.GetEncoding("Cyrillic").

我有一个字符串,可以包含任何类型的字符。我想:

  • 用非重音字符替换重音字符(如a必须变成a,e=>e,等等)
  • 仅在字符串中保留a-zA-Z、数字和
    -

    我该怎么做?

    您可以访问字符串中的每个字符。获取实际的字符,将其发送给一个方法。在这种方法中,您有一组if-lse或case开关。这就是你的规矩。如果其中一条规则接受您的字符,则返回该字符的替换字符。

    以下内容适用于您:

    // Remove all accents
    var bytes = Encoding.GetEncoding("Cyrillic").GetBytes(text);
    text = Encoding.ASCII.GetString(bytes);
    
    // Remove all unwanted characters
    var regex = new Regex("[^a-zA-Z0-9-]");
    text = regex.Replace(text, "");
    

    此函数将删除所有不允许的字符并替换您的口音

    private string FormatStringToAllowableCharacters(string inString) {
            string returnString;
            returnString = inString.Replace("é","e");
            returnString = returnString.Replace("ä","a");
            returnString = returnString.Replace("ï","i");
        returnString = Regex.Replace(returnString, "[^a-zA-Z0-9-]", "");
            return returnString;
        }
    
    您可以尝试(将重音字符拆分为“基本”字符和一个或多个组合字符),然后过滤掉所有非字母字符

    编辑:

    string s=“äï”;
    var ca=s.Normalize(NormalizationForm.FormD)
    .ToCharArray()
    
    .Where(c=>c>='a'&&c对于不是a-z、a-z、数字或重音字母的字符,您希望发生什么?它们必须从字符串中删除:)@markzzz:e'=>e是什么意思?这不是替换吗?是的,替换重音字母,它在a-zA-Z的范围内,可能与
    GetEncoding(“西里尔字母”)
    的作用重复?西里尔文中没有重音字符。是的,事实上,我也不明白它为什么起作用。还有Ӓ?我不认为这段代码会用
    e
    替换
    e'
    ,因为这实际上是OP的要求…事实上,它做到了(用
    è
    ):我希望有可能的输入字符会引发“encoderCallbackException”。或者更确切地说,你怎么能确定它不会呢?这将
    转换为
    “0”
    ,这不是问题的一部分。它也无法将
    i
    转换为
    i
    。修复为仅显示允许的字符。。。不过,我不知道你换了谁的口音。其他人可能会给你一个更好的答案。再次修复,这次是替换重音字符。我认为你应该涵盖一些字符,更像:)L.B.好的评论,我不知道这些字符到底有多少!您的链接很好,似乎涵盖了所有必要的字符。@理查德:谢谢您的编辑,使用默认的规范化表单,这不起作用。
    string s = "éäï";
    var ca = s.Normalize(NormalizationForm.FormD)
              .ToCharArray()
              .Where(c => c >= 'a' && c <= 'z');
    // ca contains eai now