除了 "ñ" 外,删除字符串中的重音。

6

我有以下示例代码:

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 :(

我需要对文本进行规范化处理,但是不能删除其中的“ñ”字符。

我遵循了这个示例,但它是针对Java的,对我没有起作用。

我的期望结果是:"ñaame"。

1个回答

8

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

使用:

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#演示

模式描述

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

1
你的答案非常好。我使用了他的代码。 非常感谢你。 - HenryGuillen17
当然,我从来没有想到过用那种方式解决问题,而且我看到了一些正则表达式。再次感谢你。 - HenryGuillen17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接