用普通数字替换Unicode数字下标或上标

sse*_*uft 2 regex unicode perl superscript unicode-normalization

如何使用正则表达式将Unicode数字下标或上标(例如?)替换为相应的数字(即2)?我当然可以单独替换它们,但那是十行代码......

我在Perl中实现这个,但这不应该真的重要.

tch*_*ist 7

从这里unisupers脚本是一个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;
}
Run Code Online (Sandbox Code Playgroud)

而从unisubs脚本是一个下标:

sub convert_to_subscripts (_) {
   my $string = $_[0];
   $string =~ tr[+?=()0123456789ae?hijklmnoprstuvx?????]
                [??????????????????????????????????????];
   return $string;
}
Run Code Online (Sandbox Code Playgroud)

你只需要走另一条路.

另一种更简单的方法就是使用k-compat规范化,它只返回基本字符而不是它们的上/下版本.我没有检查这些,看它们都是上述函数的反转.您可以使用nfkdnfkc脚本来播放它们.