【问题标题】:Remove accents in string except "ñ"删除字符串中除“ñ”之外的重音符号
【发布时间】:2018-05-09 08:48:32
【问题描述】:

我有以下示例代码:

var inputString = "ñaáme";
inputString = inputString.Replace('ñ', '\u00F1');
var normalizedString = inputString.Normalize(NormalizationForm.FormD);
var result = Regex.Replace(normalizedString, @"[^ñÑa-zA-Z0-9\s]*", string.Empty);
return result.Replace('\u00F1', 'ñ'); // naame :(

我需要规范化文本而不删除“ñ”s

I followed this example 但它适用于 Java,对我不起作用

我希望您的结果是:“ñaame”。

【问题讨论】:

    标签: c# regex normalization utf-16


    【解决方案1】:

    您可以将除特定字母ñ 和ASCII 字母(不需要规范化)之外的任何Unicode 字母与(?i)[\p{L}-[ña-z]]+ 正则表达式匹配并对其进行规范化。然后,还要从字符串中删除任何组合标记。

    使用

    var inputString = "ñaáme";
    var result = string.Concat(Regex.Replace(inputString, @"(?i)[\p{L}-[ña-z]]+", m => 
            m.Value.Normalize(NormalizationForm.FormD)
        )
        .Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
    Console.Write(result);
    

    C# demo

    模式说明

    • (?i) - 忽略大小写修饰符
    • [ - 字符类的开始
      • \p{L} - 任何 Unicode 字母
      • -[ - 除了
        • ña-z - ñ 和 ASCII 字母
      • ] - 减法结束
    • ]+ - 出现 1 次或多次。

    【讨论】:

    • 你的回答很好。我处理了他的代码。非常感谢。
    • 当然,我永远不会以这种方式找到解决方案,而且我看到了一些正则表达式。再次,非常感谢。
    猜你喜欢
    • 2012-01-21
    • 2014-12-11
    • 1970-01-01
    • 2022-01-03
    • 2019-03-31
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多