Заменить подстрочный индекс Unicode или верхний индекс на обычный номер - PullRequest
2 голосов
/ 29 февраля 2012

Как заменить числовой индекс или верхний индекс Unicode (например, ) на соответствующие цифры (т. Е. 2), используя регулярные выражения?Конечно, я могу заменить каждый из них по отдельности, но это десять строк кода ...

Я реализую это в Perl, но это не должно иметь большого значения.

1 Ответ

7 голосов
/ 29 февраля 2012

Здесь из unisupers script - это функция Perl для преобразования в надстрочные индексы Unicode:

sub convert_to_superscripts (_) {
   my $string = $_[0];
   $string =~ tr[+−=()0123456789AaÆᴂɐɑɒBbcɕDdðEeƎəɛɜɜfGgɡɣhHɦIiɪɨᵻɩjJʝɟKklLʟᶅɭMmɱNnɴɲɳŋOoɔᴖᴗɵȢPpɸrRɹɻʁsʂʃTtƫUuᴜᴝʉɥɯɰʊvVʋʌwWxyzʐʑʒꝯᴥβγδθφχнნʕⵡ]
                [⁺⁻⁼⁽⁾⁰¹²³⁴⁵⁶⁷⁸⁹ᴬᵃᴭᵆᵄᵅᶛᴮᵇᶜᶝᴰᵈᶞᴱᵉᴲᵊᵋᶟᵌᶠᴳᵍᶢˠʰᴴʱᴵⁱᶦᶤᶧᶥʲᴶᶨᶡᴷᵏˡᴸᶫᶪᶩᴹᵐᶬᴺⁿᶰᶮᶯᵑᴼᵒᵓᵔᵕᶱᴽᴾᵖᶲʳᴿʴʵʶˢᶳᶴᵀᵗᶵᵁᵘᶸᵙᶶᶣᵚᶭᶷᵛⱽᶹᶺʷᵂˣʸᶻᶼᶽᶾꝰᵜᵝᵞᵟᶿᵠᵡᵸჼˤⵯ];
   return $string;
}

А из сценарий unisubs - один для подписчиков:

sub convert_to_subscripts (_) {
   my $string = $_[0];
   $string =~ tr[+−=()0123456789aeəhijklmnoprstuvxβγρφχ]
                [₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₔₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ];
   return $string;
}

Тебе просто нужно пойти другим путем.

Другой и более простой подход заключается в простом использовании нормализаций k-compat, которые просто возвращают базовые символы вместо их верхних / нижних версий. Я не проверял их, чтобы убедиться, что они являются противоположностями вышеперечисленных функций. Вы можете играть с ними, используя nfkd и nfkc сценарии.

...