正则表达式 – 如何用代码点而不是字形替换Perl 6中的字符串?
发布时间:2020-12-14 06:23:53 所属栏目:百科 来源:网络整理
导读:我需要使用Perl 6从字符串中删除变音符号.我尝试这样做: my $hum = '????';$ahm.subst(/-[c[HEBREW LETTER ALEF] .. c[HEBREW LETTER TAV]]/,'',:g); 我想删除所有不在HEBREW LETTER ALEF(?)和HEBREW LETTER TAV(?)之间的字符.我希望以下代码返回“???”,
我需要使用Perl 6从字符串中删除变音符号.我尝试这样做:
my $hum = '????'; $ahm.subst(/<-[c[HEBREW LETTER ALEF] .. c[HEBREW LETTER TAV]]>/,'',:g); 我想删除所有不在HEBREW LETTER ALEF(?)和HEBREW LETTER TAV(?)之间的字符.我希望以下代码返回“???”,但它返回“??”. 我想发生的事情就是默认情况下Perl 6的工作原理是字形,认为它是一个字形,并删除所有字母.通过字形工作通常是明智的,但在我的情况下,我需要通过代码点来工作. 我试图找到一个可以让它通过codepoint工作但不能找到它的副词.也许在Perl 6中还有一种方法可以使用Unicode属性来排除变音符号,或者只包含字母,但我也找不到. 谢谢!
我的正则表达式很弱,所以我会采用一种不那么神奇的解决方案.
首先,您可以通过samemark删除所有标记: '????'.samemark('a') 其次,您可以通过.NFD分解字形并对各个代码点进行操作 – 例如,只保留具有属性Grapheme_Base的值 – 然后重新构造字符串: Uni.new('????'.NFD.grep(*.uniprop('Grapheme_Base'))).Str 对于混合字符串,希伯来字符的剥离标记只能如下所示: $str.subst(:g,/<:Script<Hebrew>>+/,*.Str.samemark('a')); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容