Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I would like to know how I can remove accents from a string. For example, how can I transform "string test áéíóú" into "string test aeiou"? I have to normalize some text to make comparisons, and this would be very helpful.

share|improve this question
It's worth noting that this is a follow-up question to this one. – Sjoerd C. de Vries Nov 11 '12 at 19:33
up vote 20 down vote accepted

To remove accents from a string I use this function:

removeAccent[string_] := Module[{accentMap,l1,l2},
    l1 = Characters["ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"];
    l2 = Characters["SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"];
    accentMap = Thread[l1 -> l2];
    StringReplace[string, accentMap]

So, if you apply it as removeAccent["string test áéíóú"]you get: "string test aeiou"


Now in version 10.1 we have the native function: RemoveDiacritics

RemoveDiacritics["string test áéíóú"] you get "string test aeiou"

Timing comparison using the new RepeatedTiming.

RepeatedTiming[removeAccent["string test áéíóú"]]
RepeatedTiming[RemoveDiacritics["string test áéíóú"]]
> 0.000057
> 0.000015

RemoveDiacritics wins!

share|improve this answer
Ð (ð) is not an accented D (d) but the letter eth without any accents. It should not be considered an accented character in this context. – Oleksandr R. Apr 4 '13 at 14:04
Is RemoveDiacritics not yet documented? – Karsten 7. Mar 14 '15 at 3:56
@Karsten7. Almost, see here – Murta Mar 14 '15 at 4:14
You mean in the next version 10.1 ?? – SquareOne Mar 14 '15 at 21:56
@SquareOne yes! – Murta Mar 14 '15 at 22:19

Your own method without extraneous reevaluation:

With[{accentMap =
  Characters /@
         "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"] // Thread},

 removeAccent[string_] := StringReplace[string, accentMap]

share|improve this answer
Would a Dispatch[] help matters here? – J. M. Nov 12 '12 at 9:28
I don't think so. I have made some tests with Dispatch, and it gets slower. StringReplacemust already do something like it. – Murta Nov 12 '12 at 11:38
@J.M. I'll have to test it but I believe that because the String operations are handled by a separate library things like Dispatch are not applicable. At least that's what I seem to recall concluding previously. – Mr.Wizard Nov 12 '12 at 16:39

Works nicely:

removeAccent[s_String] := Module[{patt = "(Capital)?([A-Z]{1})([A-Z]\\w*)*", del}, 
 del = Select[Characters[s], StringMatchQ[ToString[FullForm[#]],
                                          RegularExpression[".*\\[" <> patt <> "\\].*"]] &];
 StringReplace[s, Thread[del -> Map[First, StringCases[ToString[FullForm[#]] & /@ del, 
               RegularExpression[patt] :> If["$1" === "", ToLowerCase, Identity]["$2"]]]]]]


removeAccent["string test áéíóú"]
   "string test aeiou"

removeAccent["Çärîñő Ð Štùrm"]
   "Carino Ð Sturm"
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.