gpt4 book ai didi

regex - 如何通过代码点而不是字素替换 Perl 6 中的字符串?

转载 作者:行者123 更新时间:2023-12-04 06:14:41 26 4
gpt4 key购买 nike

我需要使用 Perl 6 从字符串中删除变音符号。我尝试这样做:

my $hum = 'חוּם';
$ahm.subst(/<-[\c[HEBREW LETTER ALEF] .. \c[HEBREW LETTER TAV]]>/, '', :g);

我试图删除不在 HEBREW LETTER ALEF (א) 和 HEBREW LETTER TAV (ת) 之间范围内的所有字符。我希望以下代码返回“חום”,但它返回“חם”。

我想会发生的情况是,默认情况下,Perl 6 通过字素工作,将 וּ 视为一个字素,并将其全部删除。通过字素工作通常是明智的,但在我的情况下,我需要它通过代码点工作。

我试图找到一个可以通过代码点使其工作的副词,但找不到它。也许 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'));

关于regex - 如何通过代码点而不是字素替换 Perl 6 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52259211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com