Perl

在忽略某些 unicode 字元的同時刪除非 alphas

  • December 29, 2018

我有如下文字:

[]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是對集合的補充,否則它將替換從ato 的所有字元z。)

你必須更具體。s/[[:punct:]]+/ /g將用單個空格替換所有標點字元序列,並用單個空格s/[^[:alpha:]]+/ /g替換所有非字母字元序列。

請注意,至少[:alpha:]將是特定於語言環境的,並且您需要告訴 Perl 使用 UTF-8-C等。另請注意,它[^[:alpha:]]也會刪除數字和尾隨換行符。這是在en_US.UTF-8Debian 的語言環境中:

$ echo '[]përgjithshme [" është "] 28.748 [&lt; kilometra katrorë.&gt;]' | perl -C -pe 's/[^[:alpha:]]+/ /g'
përgjithshme është kilometra katrorë $ 

$ echo '[]përgjithshme [" është "] 28.748 [&lt; kilometra katrorë.&gt;]' | perl -C -pe 's/[[:punct:]]+/ /g'
përgjithshme   është   28 748   kilometra katrorë 
$ 

引用自:https://unix.stackexchange.com/questions/491464