使用perl替换没有重音和相关数字的重音词

时间:2012-09-12 01:59:02

标签: regex perl replace

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

**实施例:*

gàr must appear as gar3

▶单词只会显示严重的重音和严重的重音,分别应该在单词的末尾加上2和3。

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

▶单词将包含非ASCII字符,如shin(带有一个有趣的倒置帽子的s)

任何人都可以建议正确的结构,正则表达式和替换模式吗?

谢谢!

以下是测试样本:

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⌉<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⌉<ON:>KI.BAL.BAR.RU2:KI

1 个答案:

答案 0 :(得分: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专家,所以我不足以解释清楚&amp;这些功能究竟是做什么的。 These articlesGoogle可能会让您有更好的想法。

2 检查Unicode table的值是否为300&amp; 301。