Perl
在忽略某些 unicode 字元的同時刪除非 alphas
我有如下文字:
[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]
此文本包含 U400 - U4FF 範圍內的西里爾字元。
我想去除非阿爾法,例如:
$$ $$"<> 但是當我在 Perl 中使用 Matt Mahoney 的腳本執行此操作時:http: //mattmahoney.net/dc/textdata.html它還應用了以下 Perl 行:
tr/a-z/ /cs;
這也刪除了上面的西里爾字元,如 ë。
有沒有辦法在 Perl 中做到這一點,即刪除非字母同時忽略某些 unicode 字元,這些字元屬於我上面提到的範圍內?
tr/a-z/ /cs;
會要求用空格替換所有不在集合中的字元a-z
。(尾隨c
是對集合的補充,否則它將替換從a
to 的所有字元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ë $