我有如下文本:
[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]
该文本包含 U400 - U4FF 范围内的西里尔字符。
我想去掉非 alpha,例如: []"<> 但是当我使用 Matt Mahoney 的脚本在 Perl 中执行此操作时:http://mattmahoney.net/dc/textdata.html它还应用以下 Perl 行:
tr/a-z/ /cs;
这也会删除上面的西里尔字符,例如 ë。
在 Perl 中是否有一种方法可以做到这一点,即删除非字母,同时忽略属于我上面提到的范围内的某些 unicode 字符?
答案1
tr/a-z/ /cs;
会要求用空格替换所有不在集合中的字符a-z
。 (尾随c
是为了补充该集合,否则它将替换从a
到 的所有字符z
。)
你必须更具体。s/[[:punct:]]+/ /g
会将所有标点字符序列替换为单个空格,并将s/[^[:alpha:]]+/ /g
所有非字母字符序列替换为单个空格。
请注意,至少[:alpha:]
将是特定于语言环境的,并且您需要告诉 Perl 使用 UTF-8-C
等。另请注意,它[^[:alpha:]]
还会删除数字和尾随换行符。这是en_US.UTF-8
Debian 上的语言环境:
$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[^[:alpha:]]+/ /g'
përgjithshme është kilometra katrorë $
$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[[:punct:]]+/ /g'
përgjithshme është 28 748 kilometra katrorë
$