perl删除度符号

时间:2013-08-02 16:42:38

标签: regex perl

我使用utf8打开一个CSV文件,然后将该文件读入多维数据哈希。 Evething有效。

use Text::CSV;
.
.
.
open ($fh, '<:utf8', $input);
.
.
.

不幸的是,有些列包含我需要剥离的度数符号。我已经使用正则表达式删除其他字符,但我似乎无法弄清楚如何去除度数符号。我正在使用的其他正则表达式的示例。

$sorted{$pkey}{"desc"} =~ s/\r\n//g; # strip NL from middle of value.

如何删除学位符号或任何非标准的标点符号?

提前致谢。

2 个答案:

答案 0 :(得分:4)

如果使用UTF-8保存源代码,则应该能够编写

use utf8;  # Tell Perl the source code is UTF-8
$sorted{$pkey}{"desc"} =~ s/°//g

你是否use utf8,你应该能够写

use charnames ':full';  # Needed before 5.16
$sorted{$pkey}{"desc"} =~ s/\N{DEGREE SIGN}//g

答案 1 :(得分:0)

不确定问题。它是带有度数符号的UTF-8文件。你能不输入学位符号?你的电脑没有使用UTF 8吗?您使用的是与Unicode不兼容的旧版Perl吗?

度数符号的UTF-8编码为C2 B0。如果您愿意,可以在替换中指定两个十六进制字节。这适用于本机运行UTF-8的Linux和Mac。它应该适用于Windows的默认编码:

my $string = "Man, It's hot. It must be 100° out here!";
$string =~ s/\xc2\xb0/ degrees/g;
say $string;  # Prints "Man, It's hot. It must be 100 degrees out here!";

当您使用这样的UTF-8文件时非常非常小心,因为您最终可能会生成无效的字符序列。

这适用于使用UTF-8的操作系统(如果您设置了正确的代码页,Windows可以使用),您使用的是现代版本的Perl,并且该文件使用的是实际的Unicode符号:

use utf8;  #MUST BE SET!!!!

$string =~ s/\N{U+00B0}/ degrees/;