删除字符串中除“ñ”之外的重音符号
Remove accents in string except "ñ"
我有以下示例代码:
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”。
您可以将除特定字母 ñ
和 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);
图案说明
(?i)
- 忽略大小写修饰符
[
- 一个字符的开头 class
\p{L}
- 任何 Unicode 字母
-[
- 除了
ña-z
- ñ
和 ASCII 字母
]
- 减法结束class
]+
- 出现 1 次或多次。
我有以下示例代码:
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”。
您可以将除特定字母 ñ
和 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);
图案说明
(?i)
- 忽略大小写修饰符[
- 一个字符的开头 class\p{L}
- 任何 Unicode 字母-[
- 除了ña-z
-ñ
和 ASCII 字母
]
- 减法结束class
]+
- 出现 1 次或多次。