【问题标题】:Regex for replacing à,Á,Ä etc. -> a, Õ,ò, etc. -> o用于替换 à,Á,Ä 等的正则表达式 -> a, Õ,ò 等 -> o
【发布时间】:2011-11-06 07:10:38
【问题描述】:

西方拉丁字符集包含诸如 À Á Â Ã Ä Å 具有与 'radix' 相同的标准字符 'a'。这发生在 e,i,o 等上。也是。 是否有正则表达式可以将这些变体替换为它们的“基数”字符?

这将用于从文本创建一个对 seo 友好的 url(但不限于):

示例:La cena è pronta => La cena e pronta

【问题讨论】:

  • 正则表达式可能不是最好的工具。标准化为 NFKD 然后从结果中删除所有非间距修饰符会更容易。 (但实际上,你想实现什么?)
  • @Daniel A. White:我的问题范围很明确!我看不出有什么不清楚的地方。
  • @Henning Makholm:谢谢,我不知道 NFKD,现在我会检查。
  • 请展示一个更清晰的例子。
  • @Valerio 这个问题不清楚。你只说你认为你需要的。你不说你想做什么。您认为自己需要的东西很可能是错误的。

标签: .net regex unicode


【解决方案1】:

试试这个:

string str = "La cena è pronta àèéìòùçæÀÈÉÌÒÙÇÆ";
str = str.Normalize(NormalizationForm.FormD); // Or use NormalizationForm.FormKD
str = Regex.Replace(str, @"\p{Mn}", "");
// Result: La cena e pronta aeeioucæAEEIOUCÆ

但请注意,Æ 仍然是 Æ

【讨论】:

  • 对于 URL 生成,最好专门选择规范化字符串中的 ASCII 字母。
  • 为什么是 FormD 而不是最初建议的 FormKD?
  • @Valerio True...我们已经取消了标记...我们可以使用 KD。两者的区别在于FormD保留了格式化信息,FormKD没有。但例如在stackoverflow.com/questions/249087/… 他们使用FormD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2012-04-26
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多