如何使用正则表达式将Unicode数字下标或上标(例如₂
)替换为相应的数字(即2
)?我当然可以单独替换它们,但这是十行代码......
我在Perl中实现这个,但这不应该真的重要。
答案 0 :(得分:7)
此处the unisupers script是一个转换为Unicode上标的Perl函数:
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;
}
the unisubs script来自下标:
sub convert_to_subscripts (_) {
my $string = $_[0];
$string =~ tr[+−=()0123456789aeəhijklmnoprstuvxβγρφχ]
[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₔₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ];
return $string;
}
你必须走另一条路。
另一种更简单的方法就是使用k-compat规范化,它只返回基本字符而不是它们的上/下版本。我没有检查这些,看它们都是上述函数的反转。您可以使用nfkd和 nfkc个脚本。