c# - 删除字符串中除 "ñ"以外的重音符号

标签 c# regex normalization utf-16

我有以下示例代码:

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

我需要在不删除“ñ”的情况下规范化文本

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

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

最佳答案

您可以将除您的特定字母 ñ 和 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 次或多次。

关于c# - 删除字符串中除 "ñ"以外的重音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47488491/

相关文章:

c# - 如何定义 web.config 局部变量

c# - 在我的示例中,继承发生了什么?而且,C# 中的正确术语是什么?

regex - 特定日期格式的正则表达式

mysql - 字段相关时的数据库结构

c# - 无法加载文件或程序集 'System.EnterpriseServices.Wrapper.dll'

c# - 如何存储对属性的引用

javascript - 带有特殊字符的坏词过滤器

java - 使用拆分提取重叠匹配项

sql - 加入 100 个表

json - 如何使用 JMESPath 获取键值对并将它们转换为对象数组