西文拉丁字符集包含字符,如 ,它們都具有相同的標準字符'a '作爲'基數'。這發生在e,i,o等。以及。 是否有將這些變體替換爲它們的「基數」字符的正則表達式?用於替代à,Á,Ä等的正則表達式 - > a,Õ,ò等 - >
這將被用來創建從一個文本搜索引擎友好的URL(但不限於):
實施例:拉以上的價格èpronta =>拉以上的價格Ëpronta
西文拉丁字符集包含字符,如 ,它們都具有相同的標準字符'a '作爲'基數'。這發生在e,i,o等。以及。 是否有將這些變體替換爲它們的「基數」字符的正則表達式?用於替代à,Á,Ä等的正則表達式 - > a,Õ,ò等 - >
這將被用來創建從一個文本搜索引擎友好的URL(但不限於):
實施例:拉以上的價格èpronta =>拉以上的價格Ëpronta
嘗試這種情況:
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'沒有。但例如在http://stackoverflow.com/questions/249087/how-do-i-remove-diacritics-accents-from-a-string-in-net/249126#249126他們使用'FormD' – xanatos
你的問題不清楚。 –
正則表達式可能不是使用它的最佳工具。將NFKD歸一化,然後從結果中刪除所有非間距修飾符會更容易。 (但實際上,你想要什麼?__)? –
@Daniel A. White:我的問題在其範圍內非常明確!我不明白什麼是不明確的。 –