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

时间:2012-04-15 11:24:29

标签: c# .net string

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

  1. 用非重音字符替换重音字符(例如à必须变成a,é=> e等等);
  2. 仅在字符串中保留a-zA-Z,数字和-;
  3. 我该怎么做?

4 个答案:

答案 0 :(得分:2)

以下内容对您有用:

// 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, "");

答案 1 :(得分:2)

您可以尝试string.Normalize(至NormalizationForm.FormD将重音字符拆分为“基本”字符和一个或多个组合字符),然后过滤掉所有非字母字符。

编辑:

string s = "éäï";
var ca = s.Normalize(NormalizationForm.FormD)
          .ToCharArray()
          .Where(c => c >= 'a' && c <= 'z');
// ca contains eai now

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

此功能将删除所有不允许的字符并替换您的重音符。

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;
    }