1

任何带重音的单词都需要去除重音,然后在单词的末尾添加一个相应的数字。

**例子:*

gàr must appear as gar3

▶ 单词只会显示重音和重音,应分别翻译为在单词末尾添加 2 和 3。

▶ 单词可能伴随着空格、制表符、回车、连字符(长或短)、括号、问号等。

▶ 单词将包括非 ASCII 字符,如 shin(上面有一个有趣的倒置帽子)

谁能建议正确的结构、正则表达式和替换模式?

谢谢 !

这是一个测试样本:

14 IGI <DIŠ>⌈x⌉-èr-ra 
15 IGI <DIŠ>bu-ṣí-ia 
16 IGI <DIŠ>su-ka-lum
17 IGI <DIŠ>ì-lí-tu-[...x-...x] 
18 ⌈MU⌉&lt;ON:>KI.BAL.BAR.RÚ:KI

它应该导致:

14 IGI <DIŠ>⌈x⌉-er3-ra
15 IGI <DIŠ>bu-ṣi2-ia
16 IGI <DIŠ>su-ka-lum
17 IGI <DIŠ>i3-li2-tu-[...x-...x]
18 ⌈MU⌉&lt;ON:>KI.BAL.BAR.RU2:KI
4

1 回答 1

1

这是一个不活跃的问题,但由于它可能对搜索类似问题的人有用,所以这里的代码完全符合您的要求:

use utf8;
use Unicode::Normalize;

my $text='IGI <DIŠ>bu-ṣí-ia'; #your input data

my $x=NFD($text); #Normalization Form D (1)
$x=~s/\x{300}/3/g; #substitute grave accents with number 3 (2)
$x=~s/\x{301}/2/g; #substitute acute accents with number 2 (2)
$x=NFC($x); #Normalization Form C (1)
print $x; #prints "IGI <DIŠ>bu-ṣi2-ia"

1我不是 Unicode 专家,所以我不足以清楚而正确地解释这些函数究竟做了什么。这些 文章谷歌可能会给你一个更好的主意。

2检查Unicode 表中的值 300 和 301。

于 2013-10-04T13:51:52.650 回答