1

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

  1. 将重音字符替换为非重音字符(如 à 必须变为 a、é=>e 等);
  2. 仅在字符串中保留 a-zA-Z、数字和-;

我该怎么做?

4

4 回答 4

3

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

编辑:

string s = "éäï";
var ca = s.Normalize(NormalizationForm.FormD)
          .ToCharArray()
          .Where(c => c >= 'a' && c <= 'z');
// ca contains eai now
于 2012-04-15T11:56:36.400 回答
1

以下内容应该适合您:

// 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, "");
于 2012-04-15T11:31:06.827 回答
-1

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

于 2012-04-15T11:29:42.677 回答
-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;
    }
于 2012-04-15T11:31:21.597 回答