2011-08-29 64 views
0

西文拉丁字符集包含字符,如 ,它們都具有相同的標準字符'a '作爲'基數'。這發生在e,i,o等。以及。 是否有將這些變體替換爲它們的「基數」字符的正則表達式?用於替代à,Á,Ä等的正則表達式 - > a,Õ,ò等 - >

這將被用來創建從一個文本搜索引擎友好的URL(但不限於):

實施例:拉以上的價格èpronta =>拉以上的價格Ëpronta

+0

你的問題不清楚。 –

+6

正則表達式可能不是使用它的最佳工具。將NFKD歸一化,然後從結果中刪除所有非間距修飾符會更容易。 (但實際上,你想要什麼?__)? –

+0

@Daniel A. White:我的問題在其範圍內非常明確!我不明白什麼是不明確的。 –

回答

2

嘗試這種情況:

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Æ 

但請注意Æ仍然爲Æ

+0

對於URL生成,可能會更好地選擇ASCII字母規範化的字符串。 –

+0

爲什麼使用FormD代替初始的FormKD? –

+0

@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